Skip to content

Commit

Permalink
Merge pull request #668 from wangyu096/github_bugfix/archive_delete_r…
Browse files Browse the repository at this point in the history
…ows_limit

bug: 作业执行历史归档的定时任务导致DB负载高,导致DB连接超时 #665
  • Loading branch information
jsonwan authored Feb 24, 2022
2 parents e3f2666 + deb6a06 commit 4033a4a
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,10 @@ public class ArchivistAutoConfig {

@Bean(name = "execute-read-dao")
@ConditionalOnExpression("${job.execute.archive.enabled:false} || ${job.execute.archive.delete.enabled:false}")
public JobExecuteDAO executeReadDAO(@Qualifier("job-execute-dsl-context") DSLContext context) {
public JobExecuteDAO executeReadDAO(@Qualifier("job-execute-dsl-context") DSLContext context,
ArchiveConfig archiveConfig) {
log.info("Init JobExecuteDAO");
return new JobExecuteDAOImpl(context);
return new JobExecuteDAOImpl(context, archiveConfig);
}

@Bean(name = "execute-archive-dao")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,16 @@ public abstract class AbstractArchivist<T extends TableRecord<?>> {
protected abstract long getFirstInstanceId();

public void archive(ArchiveConfig archiveConfig, Long maxNeedArchiveId, CountDownLatch countDownLatch) {
boolean isAcquireLock = false;
try {
archiveSummary = new ArchiveSummary();
archiveSummary.setTableName(tableName);
if (!ArchiveTaskLock.getInstance().lock(tableName)) {
archiveSummary.setSkip(true);
isAcquireLock = false;
return;
} else {
isAcquireLock = true;
}
archiveSummary.setSkip(false);
log.info("Start archive and delete, tableName: {}, archiveConfig: {}", tableName, archiveConfig);
Expand All @@ -103,7 +107,9 @@ public void archive(ArchiveConfig archiveConfig, Long maxNeedArchiveId, CountDow
archiveSummary.setArchiveEnabled(archiveConfig.isArchiveEnabled());
archiveSummary.setDeleteEnabled(archiveConfig.isDeleteEnabled());
storeArchiveSummary();
ArchiveTaskLock.getInstance().unlock(tableName);
if (isAcquireLock) {
ArchiveTaskLock.getInstance().unlock(tableName);
}
countDownLatch.countDown();
}
}
Expand Down Expand Up @@ -273,7 +279,7 @@ private boolean delete(Long maxNeedArchiveId, ArchiveConfig archiveConfig) {
lastDeletedId = stop;
deletedRows += deleteCount;
start += deleteIdStepSize;
log.info("Batch delete {}, lastDeletedId: {}, delete rows: {}, cost: {}ms", tableName,
log.info("Delete {}, lastDeletedId: {}, delete rows: {}, cost: {}ms", tableName,
lastDeletedId, deleteCount, System.currentTimeMillis() - batchDeleteStartTime);
updateDeleteProgress(lastDeletedId);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,17 @@
package com.tencent.bk.job.backup.archive;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.tencent.bk.job.backup.archive.impl.*;
import com.tencent.bk.job.backup.archive.impl.FileSourceTaskLogArchivist;
import com.tencent.bk.job.backup.archive.impl.GseTaskIpLogArchivist;
import com.tencent.bk.job.backup.archive.impl.GseTaskLogArchivist;
import com.tencent.bk.job.backup.archive.impl.OperationLogArchivist;
import com.tencent.bk.job.backup.archive.impl.StepInstanceArchivist;
import com.tencent.bk.job.backup.archive.impl.StepInstanceConfirmArchivist;
import com.tencent.bk.job.backup.archive.impl.StepInstanceFileArchivist;
import com.tencent.bk.job.backup.archive.impl.StepInstanceScriptArchivist;
import com.tencent.bk.job.backup.archive.impl.StepInstanceVariableArchivist;
import com.tencent.bk.job.backup.archive.impl.TaskInstanceArchivist;
import com.tencent.bk.job.backup.archive.impl.TaskInstanceVariableArchivist;
import com.tencent.bk.job.backup.config.ArchiveConfig;
import com.tencent.bk.job.backup.dao.ExecuteArchiveDAO;
import com.tencent.bk.job.backup.dao.JobExecuteDAO;
Expand All @@ -35,7 +45,11 @@
import org.springframework.context.SmartLifecycle;
import org.springframework.scheduling.annotation.Scheduled;

import java.util.concurrent.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@Slf4j
public class JobExecuteArchiveManage implements SmartLifecycle {
Expand Down Expand Up @@ -172,11 +186,14 @@ private void doArchive(Long endTime) throws InterruptedException {
long maxNeedArchiveStepInstanceId =
jobExecuteDAO.getMaxNeedArchiveStepInstanceId(maxNeedArchiveTaskInstanceId);

log.info("Compute archive instance id range, maxNeedArchiveTaskInstanceId: {}, " +
"maxNeedArchiveStepInstanceId: {}", maxNeedArchiveTaskInstanceId, maxNeedArchiveStepInstanceId);

ArchiveSummaryHolder.getInstance().init(endTime);
archive(maxNeedArchiveTaskInstanceId, maxNeedArchiveStepInstanceId);
ArchiveSummaryHolder.getInstance().print();

log.info("Execute log archive before {} success at {}", endTime, System.currentTimeMillis());
log.info("Job execute archive before {} success at {}", endTime, System.currentTimeMillis());
} catch (InterruptedException e) {
throw e;
} catch (Throwable e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,7 @@ public class ArchiveConfig {

@Value("${job.execute.archive.delete.enabled:false}")
private boolean deleteEnabled;

@Value("${job.execute.archive.delete.limit-row-count:5000}")
private Integer deleteLimitRowCount;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@
import com.tencent.bk.job.backup.dao.ExecuteArchiveDAO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.jooq.*;
import org.jooq.DSLContext;
import org.jooq.Field;
import org.jooq.Loader;
import org.jooq.LoaderError;
import org.jooq.TableRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,39 @@

package com.tencent.bk.job.backup.dao.impl;

import com.tencent.bk.job.backup.config.ArchiveConfig;
import com.tencent.bk.job.backup.dao.JobExecuteDAO;
import lombok.extern.slf4j.Slf4j;
import org.jooq.*;
import org.jooq.generated.tables.*;
import org.jooq.generated.tables.records.*;
import org.jooq.Condition;
import org.jooq.DSLContext;
import org.jooq.Field;
import org.jooq.Record;
import org.jooq.Record1;
import org.jooq.Result;
import org.jooq.Table;
import org.jooq.TableField;
import org.jooq.generated.tables.FileSourceTaskLog;
import org.jooq.generated.tables.GseTaskIpLog;
import org.jooq.generated.tables.GseTaskLog;
import org.jooq.generated.tables.OperationLog;
import org.jooq.generated.tables.StepInstance;
import org.jooq.generated.tables.StepInstanceConfirm;
import org.jooq.generated.tables.StepInstanceFile;
import org.jooq.generated.tables.StepInstanceScript;
import org.jooq.generated.tables.StepInstanceVariable;
import org.jooq.generated.tables.TaskInstance;
import org.jooq.generated.tables.TaskInstanceVariable;
import org.jooq.generated.tables.records.FileSourceTaskLogRecord;
import org.jooq.generated.tables.records.GseTaskIpLogRecord;
import org.jooq.generated.tables.records.GseTaskLogRecord;
import org.jooq.generated.tables.records.OperationLogRecord;
import org.jooq.generated.tables.records.StepInstanceConfirmRecord;
import org.jooq.generated.tables.records.StepInstanceFileRecord;
import org.jooq.generated.tables.records.StepInstanceRecord;
import org.jooq.generated.tables.records.StepInstanceScriptRecord;
import org.jooq.generated.tables.records.StepInstanceVariableRecord;
import org.jooq.generated.tables.records.TaskInstanceRecord;
import org.jooq.generated.tables.records.TaskInstanceVariableRecord;

import java.util.ArrayList;
import java.util.Arrays;
Expand Down Expand Up @@ -90,39 +118,39 @@ public class JobExecuteDAOImpl implements JobExecuteDAO {
private static final StepInstanceConfirm STEP_INSTANCE_CONFIRM_TABLE = StepInstanceConfirm.STEP_INSTANCE_CONFIRM;
private static final List<Field<?>> STEP_INSTANCE_CONFIRM_FIELDS =
Arrays.asList(STEP_INSTANCE_CONFIRM_TABLE.STEP_INSTANCE_ID, STEP_INSTANCE_CONFIRM_TABLE.CONFIRM_MESSAGE,
STEP_INSTANCE_CONFIRM_TABLE.CONFIRM_USERS, STEP_INSTANCE_CONFIRM_TABLE.CONFIRM_ROLES,
STEP_INSTANCE_CONFIRM_TABLE.NOTIFY_CHANNELS, STEP_INSTANCE_CONFIRM_TABLE.ROW_CREATE_TIME,
STEP_INSTANCE_CONFIRM_TABLE.ROW_UPDATE_TIME, STEP_INSTANCE_CONFIRM_TABLE.CONFIRM_REASON);
STEP_INSTANCE_CONFIRM_TABLE.CONFIRM_USERS, STEP_INSTANCE_CONFIRM_TABLE.CONFIRM_ROLES,
STEP_INSTANCE_CONFIRM_TABLE.NOTIFY_CHANNELS, STEP_INSTANCE_CONFIRM_TABLE.ROW_CREATE_TIME,
STEP_INSTANCE_CONFIRM_TABLE.ROW_UPDATE_TIME, STEP_INSTANCE_CONFIRM_TABLE.CONFIRM_REASON);

private static final StepInstanceFile STEP_INSTANCE_FILE_TABLE = StepInstanceFile.STEP_INSTANCE_FILE;
private static final List<Field<?>> STEP_INSTANCE_FILE_FIELDS =
Arrays.asList(STEP_INSTANCE_FILE_TABLE.STEP_INSTANCE_ID, STEP_INSTANCE_FILE_TABLE.FILE_SOURCE,
STEP_INSTANCE_FILE_TABLE.RESOLVED_FILE_SOURCE, STEP_INSTANCE_FILE_TABLE.FILE_TARGET_PATH,
STEP_INSTANCE_FILE_TABLE.RESOLVED_FILE_TARGET_PATH, STEP_INSTANCE_FILE_TABLE.FILE_UPLOAD_SPEED_LIMIT,
STEP_INSTANCE_FILE_TABLE.FILE_DOWNLOAD_SPEED_LIMIT, STEP_INSTANCE_FILE_TABLE.FILE_DUPLICATE_HANDLE,
STEP_INSTANCE_FILE_TABLE.NOT_EXIST_PATH_HANDLER, STEP_INSTANCE_FILE_TABLE.EXECUTION_TIMEOUT,
STEP_INSTANCE_FILE_TABLE.SYSTEM_ACCOUNT_ID, STEP_INSTANCE_FILE_TABLE.SYSTEM_ACCOUNT,
STEP_INSTANCE_FILE_TABLE.ROW_CREATE_TIME, STEP_INSTANCE_FILE_TABLE.ROW_UPDATE_TIME);
STEP_INSTANCE_FILE_TABLE.RESOLVED_FILE_SOURCE, STEP_INSTANCE_FILE_TABLE.FILE_TARGET_PATH,
STEP_INSTANCE_FILE_TABLE.RESOLVED_FILE_TARGET_PATH, STEP_INSTANCE_FILE_TABLE.FILE_UPLOAD_SPEED_LIMIT,
STEP_INSTANCE_FILE_TABLE.FILE_DOWNLOAD_SPEED_LIMIT, STEP_INSTANCE_FILE_TABLE.FILE_DUPLICATE_HANDLE,
STEP_INSTANCE_FILE_TABLE.NOT_EXIST_PATH_HANDLER, STEP_INSTANCE_FILE_TABLE.EXECUTION_TIMEOUT,
STEP_INSTANCE_FILE_TABLE.SYSTEM_ACCOUNT_ID, STEP_INSTANCE_FILE_TABLE.SYSTEM_ACCOUNT,
STEP_INSTANCE_FILE_TABLE.ROW_CREATE_TIME, STEP_INSTANCE_FILE_TABLE.ROW_UPDATE_TIME);

private static final StepInstanceScript STEP_INSTANCE_SCRIPT_TABLE = StepInstanceScript.STEP_INSTANCE_SCRIPT;
private static final List<Field<?>> STEP_INSTANCE_SCRIPT_FIELDS =
Arrays.asList(STEP_INSTANCE_SCRIPT_TABLE.STEP_INSTANCE_ID, STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_CONTENT,
STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_TYPE, STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_PARAM,
STEP_INSTANCE_SCRIPT_TABLE.RESOLVED_SCRIPT_PARAM, STEP_INSTANCE_SCRIPT_TABLE.EXECUTION_TIMEOUT,
STEP_INSTANCE_SCRIPT_TABLE.SYSTEM_ACCOUNT_ID, STEP_INSTANCE_SCRIPT_TABLE.SYSTEM_ACCOUNT,
STEP_INSTANCE_SCRIPT_TABLE.DB_ACCOUNT_ID, STEP_INSTANCE_SCRIPT_TABLE.DB_TYPE,
STEP_INSTANCE_SCRIPT_TABLE.DB_ACCOUNT, STEP_INSTANCE_SCRIPT_TABLE.DB_PASSWORD,
STEP_INSTANCE_SCRIPT_TABLE.DB_PORT, STEP_INSTANCE_SCRIPT_TABLE.ROW_CREATE_TIME,
STEP_INSTANCE_SCRIPT_TABLE.ROW_UPDATE_TIME, STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_SOURCE,
STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_ID, STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_VERSION_ID,
STEP_INSTANCE_SCRIPT_TABLE.IS_SECURE_PARAM);
STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_TYPE, STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_PARAM,
STEP_INSTANCE_SCRIPT_TABLE.RESOLVED_SCRIPT_PARAM, STEP_INSTANCE_SCRIPT_TABLE.EXECUTION_TIMEOUT,
STEP_INSTANCE_SCRIPT_TABLE.SYSTEM_ACCOUNT_ID, STEP_INSTANCE_SCRIPT_TABLE.SYSTEM_ACCOUNT,
STEP_INSTANCE_SCRIPT_TABLE.DB_ACCOUNT_ID, STEP_INSTANCE_SCRIPT_TABLE.DB_TYPE,
STEP_INSTANCE_SCRIPT_TABLE.DB_ACCOUNT, STEP_INSTANCE_SCRIPT_TABLE.DB_PASSWORD,
STEP_INSTANCE_SCRIPT_TABLE.DB_PORT, STEP_INSTANCE_SCRIPT_TABLE.ROW_CREATE_TIME,
STEP_INSTANCE_SCRIPT_TABLE.ROW_UPDATE_TIME, STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_SOURCE,
STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_ID, STEP_INSTANCE_SCRIPT_TABLE.SCRIPT_VERSION_ID,
STEP_INSTANCE_SCRIPT_TABLE.IS_SECURE_PARAM);

private static final StepInstanceVariable STEP_INSTANCE_VARIABLE_TABLE =
StepInstanceVariable.STEP_INSTANCE_VARIABLE;
private static final List<Field<?>> STEP_INSTANCE_VARIABLE_FIELDS =
Arrays.asList(STEP_INSTANCE_VARIABLE_TABLE.TASK_INSTANCE_ID, STEP_INSTANCE_VARIABLE_TABLE.STEP_INSTANCE_ID,
STEP_INSTANCE_VARIABLE_TABLE.TYPE, STEP_INSTANCE_VARIABLE_TABLE.PARAM_VALUES,
STEP_INSTANCE_VARIABLE_TABLE.ROW_CREATE_TIME, STEP_INSTANCE_VARIABLE_TABLE.ROW_UPDATE_TIME);
STEP_INSTANCE_VARIABLE_TABLE.TYPE, STEP_INSTANCE_VARIABLE_TABLE.PARAM_VALUES,
STEP_INSTANCE_VARIABLE_TABLE.ROW_CREATE_TIME, STEP_INSTANCE_VARIABLE_TABLE.ROW_UPDATE_TIME);
private static final TaskInstance TASK_INSTANCE_TABLE = TaskInstance.TASK_INSTANCE;
private static final List<Field<?>> TASK_INSTANCE_FIELDS = Arrays.asList(TASK_INSTANCE_TABLE.ID,
TASK_INSTANCE_TABLE.APP_ID, TASK_INSTANCE_TABLE.TASK_ID,
Expand All @@ -140,11 +168,14 @@ public class JobExecuteDAOImpl implements JobExecuteDAO {
TASK_INSTANCE_VARIABLE_TABLE.NAME, TASK_INSTANCE_VARIABLE_TABLE.TYPE,
TASK_INSTANCE_VARIABLE_TABLE.VALUE, TASK_INSTANCE_VARIABLE_TABLE.IS_CHANGEABLE,
TASK_INSTANCE_VARIABLE_TABLE.ROW_CREATE_TIME, TASK_INSTANCE_VARIABLE_TABLE.ROW_UPDATE_TIME);

private final DSLContext context;
private final ArchiveConfig archiveConfig;

public JobExecuteDAOImpl(DSLContext context) {
public JobExecuteDAOImpl(DSLContext context, ArchiveConfig archiveConfig) {
log.info("Init ExecuteReadDAO.");
this.context = context;
this.archiveConfig = archiveConfig;
}

@Override
Expand Down Expand Up @@ -412,86 +443,99 @@ public int deleteFileSourceTaskLog(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(FILE_SOURCE_TASK_LOG_TABLE.STEP_INSTANCE_ID.greaterThan(start));
conditions.add(FILE_SOURCE_TASK_LOG_TABLE.STEP_INSTANCE_ID.lessOrEqual(stop));
return context.delete(FILE_SOURCE_TASK_LOG_TABLE).where(conditions).execute();
return deleteWithLimit(FILE_SOURCE_TASK_LOG_TABLE, conditions);
}

@Override
public int deleteGseTaskIpLog(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(GSE_TASK_IP_LOG_TABLE.STEP_INSTANCE_ID.greaterThan(start));
conditions.add(GSE_TASK_IP_LOG_TABLE.STEP_INSTANCE_ID.lessOrEqual(stop));
return context.delete(GSE_TASK_IP_LOG_TABLE).where(conditions).execute();
return deleteWithLimit(GSE_TASK_IP_LOG_TABLE, conditions);
}

private int deleteWithLimit(Table<? extends Record> table, List<Condition> conditions) {
int totalDeleteRows = 0;
int maxLimitedDeleteRows = archiveConfig.getDeleteLimitRowCount();
while (true) {
int deletedRows = context.delete(table).where(conditions).limit(maxLimitedDeleteRows).execute();
totalDeleteRows += deletedRows;
if (deletedRows < maxLimitedDeleteRows) {
break;
}
}
return totalDeleteRows;
}

@Override
public int deleteGseTaskLog(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(GSE_TASK_LOG_TABLE.STEP_INSTANCE_ID.greaterThan(start));
conditions.add(GSE_TASK_LOG_TABLE.STEP_INSTANCE_ID.lessOrEqual(stop));
return context.delete(GSE_TASK_LOG_TABLE).where(conditions).execute();
return deleteWithLimit(GSE_TASK_LOG_TABLE, conditions);
}

@Override
public int deleteOperationLog(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(OPERATION_LOG_TABLE.TASK_INSTANCE_ID.greaterThan(start));
conditions.add(OPERATION_LOG_TABLE.TASK_INSTANCE_ID.lessOrEqual(stop));
return context.delete(OPERATION_LOG_TABLE).where(conditions).execute();
return deleteWithLimit(OPERATION_LOG_TABLE, conditions);
}

@Override
public int deleteStepInstance(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(STEP_INSTANCE_TABLE.ID.greaterThan(start));
conditions.add(STEP_INSTANCE_TABLE.ID.lessOrEqual(stop));
return context.delete(STEP_INSTANCE_TABLE).where(conditions).execute();
return deleteWithLimit(STEP_INSTANCE_TABLE, conditions);
}

@Override
public int deleteStepInstanceConfirm(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(STEP_INSTANCE_CONFIRM_TABLE.STEP_INSTANCE_ID.greaterThan(start));
conditions.add(STEP_INSTANCE_CONFIRM_TABLE.STEP_INSTANCE_ID.lessOrEqual(stop));
return context.delete(STEP_INSTANCE_CONFIRM_TABLE).where(conditions).execute();
return deleteWithLimit(STEP_INSTANCE_CONFIRM_TABLE, conditions);
}

@Override
public int deleteStepInstanceFile(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(STEP_INSTANCE_FILE_TABLE.STEP_INSTANCE_ID.greaterThan(start));
conditions.add(STEP_INSTANCE_FILE_TABLE.STEP_INSTANCE_ID.lessOrEqual(stop));
return context.delete(STEP_INSTANCE_FILE_TABLE).where(conditions).execute();
return deleteWithLimit(STEP_INSTANCE_FILE_TABLE, conditions);
}

@Override
public int deleteStepInstanceScript(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(STEP_INSTANCE_SCRIPT_TABLE.STEP_INSTANCE_ID.greaterThan(start));
conditions.add(STEP_INSTANCE_SCRIPT_TABLE.STEP_INSTANCE_ID.lessOrEqual(stop));
return context.delete(STEP_INSTANCE_SCRIPT_TABLE).where(conditions).execute();
return deleteWithLimit(STEP_INSTANCE_SCRIPT_TABLE, conditions);
}

@Override
public int deleteStepInstanceVariable(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(STEP_INSTANCE_VARIABLE_TABLE.STEP_INSTANCE_ID.greaterThan(start));
conditions.add(STEP_INSTANCE_VARIABLE_TABLE.STEP_INSTANCE_ID.lessOrEqual(stop));
return context.delete(STEP_INSTANCE_VARIABLE_TABLE).where(conditions).execute();
return deleteWithLimit(STEP_INSTANCE_VARIABLE_TABLE, conditions);
}

@Override
public int deleteTaskInstance(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(TASK_INSTANCE_TABLE.ID.greaterThan(start));
conditions.add(TASK_INSTANCE_TABLE.ID.lessOrEqual(stop));
return context.delete(TASK_INSTANCE_TABLE).where(conditions).execute();
return deleteWithLimit(TASK_INSTANCE_TABLE, conditions);
}

@Override
public int deleteTaskInstanceVariable(Long start, Long stop) {
List<Condition> conditions = new ArrayList<>();
conditions.add(TASK_INSTANCE_VARIABLE_TABLE.TASK_INSTANCE_ID.greaterThan(start));
conditions.add(TASK_INSTANCE_VARIABLE_TABLE.TASK_INSTANCE_ID.lessOrEqual(stop));
return context.delete(TASK_INSTANCE_VARIABLE_TABLE).where(conditions).execute();
return deleteWithLimit(TASK_INSTANCE_VARIABLE_TABLE, conditions);
}
}

0 comments on commit 4033a4a

Please sign in to comment.