Skip to content

Commit

Permalink
Change queries to use params instead of String format
Browse files Browse the repository at this point in the history
  • Loading branch information
andreldsr committed Mar 7, 2024
1 parent 7fac02c commit 6926a51
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,7 @@
*/
package com.pinterest.deployservice.db;

import com.pinterest.deployservice.bean.AgentBean;
import com.pinterest.deployservice.bean.AgentState;
import com.pinterest.deployservice.bean.DeployStage;
import com.pinterest.deployservice.bean.SetClause;
import com.pinterest.deployservice.bean.*;
import com.pinterest.deployservice.dao.AgentDAO;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
Expand All @@ -31,8 +28,8 @@
public class DBAgentDAOImpl implements AgentDAO {
private static final String UPDATE_AGENT_TEMPLATE =
"UPDATE agents SET %s WHERE host_id=? AND env_id=?";
private static final String UPDATE_AGENTS_BY_HOSTIDS =
"" + "UPDATE agents SET %s WHERE host_id IN (%s) AND env_id=?";
private static final String UPDATE_AGENTS_BY_HOSTIDS =
"UPDATE agents SET %s WHERE host_id IN (?) AND env_id=?";
private static final String UPDATE_AGENT_BY_ID_TEMPLATE =
"UPDATE agents SET %s WHERE host_id=?";
private static final String RESET_FAILED_AGENTS =
Expand Down Expand Up @@ -83,7 +80,7 @@ public class DBAgentDAOImpl implements AgentDAO {
private static final String COUNT_FINISHED_AGENTS_BY_DEPLOY_WITH_HOST_TAGS =
"SELECT COUNT(*) FROM agents INNER JOIN host_tags ON host_tags.host_id = agents.host_id " +
"WHERE agents.env_id=? AND host_tags.env_id=? AND agents.deploy_id=? AND (agents.deploy_stage='SERVING_BUILD' OR agents.state='PAUSED_BY_USER' OR agents.state='PAUSED_BY_SYSTEM') " +
"AND host_tags.tag_name = ? AND host_tags.tag_value IN (%s)";
"AND host_tags.tag_name = ? AND host_tags.tag_value IN (?)";
private static final String COUNT_AGENTS_BY_DEPLOY =
"SELECT COUNT(*) FROM agents WHERE deploy_id=?";
private static final String COUNT_ALL_DEPLOYED_HOSTS =
Expand All @@ -110,10 +107,8 @@ public void update(String hostId, String envId, AgentBean agentBean) throws Exce
@Override
public void updateMultiple(Collection<String> hostIds, String envId, AgentBean agentBean) throws Exception {
SetClause setClause = agentBean.genSetClause();
String hostStr = QueryUtils.genStringGroupClause(hostIds);
String clause = String.format(UPDATE_AGENTS_BY_HOSTIDS, setClause.getClause(), hostStr);
setClause.addValue(envId);
new QueryRunner(dataSource).update(clause, setClause.getValueArray());
String clause = String.format(UPDATE_AGENTS_BY_HOSTIDS, setClause.getClause());
new QueryRunner(dataSource).update(clause, setClause.getValueArray(), hostIds, envId);
}

@Override
Expand Down Expand Up @@ -264,9 +259,8 @@ public long countDeployingAgentWithHostTag(String envId, String tagName, String

@Override
public long countFinishedAgentsByDeployWithHostTags(String envId, String deployId, String tagName, List<String> tagValues) throws Exception {
String tagValuesStr = QueryUtils.genStringGroupClause(tagValues);
Long n = new QueryRunner(dataSource).query(String.format(COUNT_FINISHED_AGENTS_BY_DEPLOY_WITH_HOST_TAGS, tagValuesStr),
SingleResultSetHandlerFactory.<Long>newObjectHandler(), envId, envId, deployId, tagName);
Long n = new QueryRunner(dataSource).query(COUNT_FINISHED_AGENTS_BY_DEPLOY_WITH_HOST_TAGS,
SingleResultSetHandlerFactory.<Long>newObjectHandler(), envId, envId, deployId, tagName, tagValues);
return n == null ? 0 : n;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public class DBBuildDAOImpl implements BuildDAO {
private static final String GET_TOTAL_BY_NAME =
"SELECT COUNT(*) FROM builds WHERE build_name=?";
private static final String GET_LIST_OF_BUILDS_BY_IDs =
"" + "SELECT * FROM builds where build_id IN (%s)";
"SELECT * FROM builds where build_id IN (?)";

private static final String DELETE_UNUSED_BUILDS =
"DELETE FROM builds WHERE build_name=? AND publish_date<? "
Expand Down Expand Up @@ -244,16 +244,12 @@ public void deleteUnusedBuilds(String buildName, long timeThreshold, long numOfB

@Override
public List<BuildBean> getBuildsFromIds(Collection<String> ids) throws Exception {
if (ids.size() == 0) {
if (ids.isEmpty()) {
return new ArrayList<>(); //MySQL doesn't allow IN (). So just return empty here.
}

ResultSetHandler<List<BuildBean>> h = new BeanListHandler<>(BuildBean.class);
QueryRunner run = new QueryRunner(dataSource);
return run
.query(String.format(GET_LIST_OF_BUILDS_BY_IDs, QueryUtils.genStringGroupClause(ids)),
h);

return run.query(GET_LIST_OF_BUILDS_BY_IDs, h, ids);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,13 @@ public class DBDeployDAOImpl implements DeployDAO {
"INNER JOIN builds ON deploys.build_id=builds.build_id " +
"%s";
private static final String GET_ACCEPTED_DEPLOYS_TEMPLATE =
"SELECT * FROM deploys WHERE env_id='%s' AND deploy_type IN (%s) " +
"AND acc_status='ACCEPTED' AND start_date>%d AND start_date<%d ORDER BY start_date DESC"
+ " LIMIT %d";
"SELECT * FROM deploys WHERE env_id=? AND deploy_type IN (?) " +
"AND acc_status='ACCEPTED' AND start_date>? AND start_date<? ORDER BY start_date DESC"
+ " LIMIT ?";
private static final String GET_ACCEPTED_DEPLOYS_DELAYED_TEMPLATE =
"SELECT * FROM deploys WHERE env_id='%s' AND deploy_type NOT IN ('ROLLBACK', 'STOP') " +
"AND acc_status='ACCEPTED' AND start_date>%d " +
"AND state in ('SUCCEEDING', 'SUCCEEDED') AND suc_date<%d " +
"SELECT * FROM deploys WHERE env_id=? AND deploy_type NOT IN ('ROLLBACK', 'STOP') " +
"AND acc_status='ACCEPTED' AND start_date>? " +
"AND state in ('SUCCEEDING', 'SUCCEEDED') AND suc_date<? " +
"ORDER BY start_date DESC LIMIT 1";
private static final String
COUNT_OF_NONREGULAR_DEPLOYS =
Expand Down Expand Up @@ -201,23 +201,25 @@ public UpdateStatement genInsertStatement(DeployBean deployBean) {
public List<DeployBean> getAcceptedDeploys(String envId, Interval interval, int size)
throws Exception {
ResultSetHandler<List<DeployBean>> h = new BeanListHandler<>(DeployBean.class);
String
typesClause =
QueryUtils.genEnumGroupClause(StateMachines.AUTO_PROMOTABLE_DEPLOY_TYPE);
return new QueryRunner(dataSource).query(
String.format(GET_ACCEPTED_DEPLOYS_TEMPLATE, envId, typesClause,
GET_ACCEPTED_DEPLOYS_TEMPLATE,
h,
envId,
StateMachines.AUTO_PROMOTABLE_DEPLOY_TYPE,
interval.getStartMillis(),
interval.getEndMillis(), size), h);
interval.getEndMillis(),
size);
}


@Override
public List<DeployBean> getAcceptedDeploysDelayed(String envId, Interval interval)
throws Exception {
ResultSetHandler<List<DeployBean>> h = new BeanListHandler<>(DeployBean.class);
return new QueryRunner(dataSource).query(
String.format(GET_ACCEPTED_DEPLOYS_DELAYED_TEMPLATE, envId, interval.getStartMillis(),
interval.getEndMillis()), h);
return new QueryRunner(dataSource).query(GET_ACCEPTED_DEPLOYS_DELAYED_TEMPLATE, h,
envId,
interval.getStartMillis(),
interval.getEndMillis());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,11 @@ public class DBEnvironDAOImpl implements EnvironDAO {
private static final String GET_ENVS_BY_HOST_TMPL =
"SELECT e.* FROM environs e " +
"INNER JOIN hosts_and_envs he ON he.env_id = e.env_id " +
"WHERE he.host_name = '%s'";
"WHERE he.host_name = ?";
private static final String GET_ENVS_BY_GROUPS_TMPL =
"SELECT e.* FROM environs e " +
"INNER JOIN groups_and_envs ge ON ge.env_id = e.env_id " +
"WHERE ge.group_name IN (%s)";
"WHERE ge.group_name IN (?)";
private static final String COUNT_HOSTS_BY_CAPACITY =
"SELECT COUNT(DISTINCT host_name) FROM (" +
"SELECT h.host_name FROM hosts h INNER JOIN groups_and_envs ge ON ge.group_name = h.group_name WHERE ge.env_id=? " +
Expand Down Expand Up @@ -235,18 +235,17 @@ public Collection<String> getMissingHosts(String envId) throws Exception {
@Override
public List<EnvironBean> getEnvsByHost(String host) throws Exception {
ResultSetHandler<List<EnvironBean>> h = new BeanListHandler<EnvironBean>(EnvironBean.class);
List<EnvironBean> hostEnvs = new QueryRunner(dataSource).query(String.format(GET_ENVS_BY_HOST_TMPL, host), h);
Set<EnvironBean> envSet = new TreeSet<EnvironBean>((EnvironBean e1, EnvironBean e2) ->e1.getEnv_id().compareTo(e2.getEnv_id()));
List<EnvironBean> hostEnvs = new QueryRunner(dataSource).query(GET_ENVS_BY_HOST_TMPL, h, host);
Set<EnvironBean> envSet = new TreeSet<EnvironBean>(Comparator.comparing(EnvironBean::getEnv_id));
envSet.addAll(hostEnvs);
return new ArrayList<EnvironBean>(envSet);
}

@Override
public List<EnvironBean> getEnvsByGroups(Collection<String> groups) throws Exception {
ResultSetHandler<List<EnvironBean>> h = new BeanListHandler<>(EnvironBean.class);
String groupStr = QueryUtils.genStringGroupClause(groups);
List<EnvironBean> groupEnvs = new QueryRunner(dataSource).query(String.format(GET_ENVS_BY_GROUPS_TMPL, groupStr), h);
Set<EnvironBean> envSet = new TreeSet<EnvironBean>((EnvironBean e1, EnvironBean e2) ->e1.getEnv_id().compareTo(e2.getEnv_id()));
List<EnvironBean> groupEnvs = new QueryRunner(dataSource).query(GET_ENVS_BY_GROUPS_TMPL, h, groups);
Set<EnvironBean> envSet = new TreeSet<EnvironBean>(Comparator.comparing(EnvironBean::getEnv_id));
envSet.addAll(groupEnvs);
return new ArrayList<EnvironBean>(envSet);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public class DBHostDAOImpl implements HostDAO {
private static final String UPDATE_HOST_BY_ID = "UPDATE hosts SET %s WHERE host_id=?";
private static final String INSERT_HOST_TEMPLATE = "INSERT INTO hosts SET %s ON DUPLICATE KEY UPDATE %s";
private static final String INSERT_UPDATE_TEMPLATE = "INSERT INTO hosts %s VALUES %s ON DUPLICATE KEY UPDATE ip=?, last_update=?, account_id=?, " +
"state=IF(state!='%s' AND state!='%s' AND state!='%s', VALUES(state), state), " +
"state=IF(state!=? AND state!=? AND state!=?, VALUES(state), state), " +
"host_name=CASE WHEN host_name IS NULL THEN ? WHEN host_name=host_id THEN ? ELSE host_name END, " +
"ip=CASE WHEN ip IS NULL THEN ? ELSE ip END";
private static final String DELETE_HOST_BY_ID = "DELETE FROM hosts WHERE host_id=?";
Expand Down Expand Up @@ -126,7 +126,9 @@ public void insertOrUpdate(String hostName, String ip, String hostId, String sta
names.append(")");

StringBuilder sb = new StringBuilder();

for (String groupName : groupNames) {

sb.append("('");
sb.append(hostId);
sb.append("','");
Expand All @@ -153,9 +155,12 @@ public void insertOrUpdate(String hostName, String ip, String hostId, String sta
sb.append("'),");
}
sb.setLength(sb.length() - 1);
new QueryRunner(dataSource).update(String.format(INSERT_UPDATE_TEMPLATE, names, sb.toString(),
HostState.PENDING_TERMINATE.toString(), HostState.TERMINATING.toString(),
HostState.PENDING_TERMINATE_NO_REPLACE.toString()), ip, now, accountId, hostName, hostName, ip);
new QueryRunner(dataSource).update(String.format(INSERT_UPDATE_TEMPLATE, names, sb.toString()),
ip, now, accountId,
HostState.PENDING_TERMINATE.toString(),
HostState.TERMINATING.toString(),
HostState.PENDING_TERMINATE_NO_REPLACE.toString(),
hostName, hostName, ip);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
public class DBHostTagDAOImpl implements HostTagDAO {

private static final String INSERT_HOST_TAG_TEMPLATE = "INSERT INTO host_tags SET %s ON DUPLICATE KEY UPDATE %s";
private static final String DELETE_HOST_TAG_BY_ENV_ID_AND_HOST_ID = "DELETE FROM host_tags WHERE env_id = ? AND host_id IN ( %s ) ";
private static final String DELETE_HOST_TAG_BY_ENV_ID_AND_HOST_ID = "DELETE FROM host_tags WHERE env_id = ? AND host_id IN (?) ";
private static final String DELETE_HOST_TAG_BY_ENV_ID_AND_TAG_NAME = "DELETE FROM host_tags WHERE env_id = ? AND tag_name = ? ";
private static final String DELETE_BY_HOST_ID = "DELETE FROM host_tags WHERE host_id = ?";
private static final String GET_HOST_TAG_BY_HOST_ID_AND_TAG_NAME = "SELECT * FROM host_tags WHERE host_id = ? AND tag_name = ? ";
Expand All @@ -44,7 +44,7 @@ public class DBHostTagDAOImpl implements HostTagDAO {
private static final String GET_HOSTS_BY_ENV_ID = "SELECT DISTINCT(host_tags.host_id) AS host_id, host_tags.tag_value AS tag_value, host_tags.tag_name AS tag_name, hosts.host_name AS host_name FROM hosts " +
"INNER JOIN host_tags ON hosts.host_id = host_tags.host_id " +
"WHERE host_tags.env_id = ?";
private static final String COUNT_HOSTS_BY_ENV_ID_AND_TAGS = "SELECT count(DISTINCT(host_id)) FROM host_tags WHERE env_id = ? AND tag_name = ? AND tag_value IN (%s) ";
private static final String COUNT_HOSTS_BY_ENV_ID_AND_TAGS = "SELECT count(DISTINCT(host_id)) FROM host_tags WHERE env_id = ? AND tag_name = ? AND tag_value IN (?) ";
private static final String GET_ALL_BY_ENV_ID_AND_TAG_NAME = "SELECT * FROM host_tags WHERE env_id = ? AND tag_name = ? ";
private static final RowProcessor ROW_PROCESSOR = new HostTagBeanRowProcessor();
private BasicDataSource dataSource;
Expand Down Expand Up @@ -88,8 +88,7 @@ public void deleteByHostId(String hostId) throws Exception {

@Override
public void deleteAllByEnvIdAndHostIds(String envId, List<String> hostIds) throws Exception {
String hostStr = QueryUtils.genStringGroupClause(hostIds);
new QueryRunner(dataSource).update(String.format(DELETE_HOST_TAG_BY_ENV_ID_AND_HOST_ID, hostStr), envId);
new QueryRunner(dataSource).update(DELETE_HOST_TAG_BY_ENV_ID_AND_HOST_ID, envId, hostIds);
}

@Override
Expand All @@ -112,9 +111,8 @@ public List<HostTagInfo> getHostsByEnvId(String envId) throws Exception {

@Override
public long countHostsByEnvIdAndTags(String envId, String tagName, List<String> tagValues) throws Exception {
String tagValuesStr = QueryUtils.genStringGroupClause(tagValues);
Long n = new QueryRunner(dataSource).query(String.format(COUNT_HOSTS_BY_ENV_ID_AND_TAGS, tagValuesStr),
SingleResultSetHandlerFactory.<Long>newObjectHandler(), envId, tagName);
Long n = new QueryRunner(dataSource).query(COUNT_HOSTS_BY_ENV_ID_AND_TAGS,
SingleResultSetHandlerFactory.<Long>newObjectHandler(), envId, tagName, tagValues);
return n == null ? 0 : n;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ boolean canDeployWithConstraint(String hostId, EnvironBean envBean) throws Excep
if(deployConstraintBean.getConstraint_type() == DeployConstraintType.GROUP_BY_GROUP) {
// if it is GROUP_BY_GROUP deploy, needs to check pre-requisite tags when pre-requisite tag hosts are all done, then it becomes its turn
List<String> prerequisiteTagValues = hostTagDAO.getAllPrerequisiteTagValuesByEnvIdAndTagName(envBean.getEnv_id(), tagName, tagValue);
if(prerequisiteTagValues!= null && prerequisiteTagValues.size() > 0) {
if(prerequisiteTagValues!= null && !prerequisiteTagValues.isEmpty()) {
// if there is any pre-requisite tag, the hosts tagged by this pre-requisite tag should deploy first
long totalExistingHostsWithPrerequisiteTags = hostTagDAO.countHostsByEnvIdAndTags(envBean.getEnv_id(), tagName, prerequisiteTagValues);
long totalFinishedAgentsWithPrerequisiteTags = agentDAO.countFinishedAgentsByDeployWithHostTags(envBean.getEnv_id(), envBean.getDeploy_id(), tagName, prerequisiteTagValues);
Expand Down

0 comments on commit 6926a51

Please sign in to comment.