提交 527b3823 编写于 作者: S serge-rider

#2201 Auto-recover after data reading


Former-commit-id: e79b3387
上级 bfe8a8b1
......@@ -26,6 +26,7 @@ import org.eclipse.ui.progress.UIJob;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.DBDDataFilter;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
......@@ -46,9 +47,8 @@ class ResultSetJobDataRead extends ResultSetJobAbstract implements ILoadService<
private int maxRows;
private Throwable error;
private DBCStatistics statistics;
private DBRProgressMonitor progressMonitor;
protected ResultSetJobDataRead(DBSDataContainer dataContainer, DBDDataFilter dataFilter, ResultSetViewer controller, DBCExecutionContext executionContext, Composite progressControl) {
ResultSetJobDataRead(DBSDataContainer dataContainer, DBDDataFilter dataFilter, ResultSetViewer controller, DBCExecutionContext executionContext, Composite progressControl) {
super(CoreMessages.controls_rs_pump_job_name + " [" + dataContainer + "]", dataContainer, controller, executionContext);
this.dataFilter = dataFilter;
this.progressControl = progressControl;
......@@ -78,26 +78,31 @@ class ResultSetJobDataRead extends ResultSetJobAbstract implements ILoadService<
protected IStatus run(DBRProgressMonitor monitor) {
error = null;
final ProgressLoaderVisualizer<Object> visualizer = new ProgressLoaderVisualizer<>(this, progressControl);
progressMonitor = visualizer.overwriteMonitor(monitor);
DBCExecutionPurpose purpose = DBCExecutionPurpose.USER;
if (dataFilter != null && dataFilter.hasFilters()) {
purpose = DBCExecutionPurpose.USER_FILTERED;
}
DBRProgressMonitor progressMonitor = visualizer.overwriteMonitor(monitor);
DBCExecutionPurpose purpose = dataFilter != null && dataFilter.hasFilters() ? DBCExecutionPurpose.USER_FILTERED : DBCExecutionPurpose.USER;
new PumpVisualizer(visualizer).schedule(PROGRESS_VISUALIZE_PERIOD * 2);
try (DBCSession session = getExecutionContext().openSession(
progressMonitor,
purpose,
NLS.bind(CoreMessages.controls_rs_pump_job_context_name, dataContainer.toString())))
{
statistics = dataContainer.readData(
this,
session,
controller.getDataReceiver(),
dataFilter,
offset,
maxRows,
DBSDataContainer.FLAG_READ_PSEUDO
);
DBUtils.tryExecuteRecover(monitor, getDataContainer().getDataSource(), monitor1 -> {
try {
statistics = dataContainer.readData(
ResultSetJobDataRead.this,
session,
controller.getDataReceiver(),
dataFilter,
offset,
maxRows,
DBSDataContainer.FLAG_READ_PSEUDO
);
} catch (Throwable e) {
throw new InvocationTargetException(e);
}
});
} catch (DBException e) {
error = e;
} finally {
......@@ -123,13 +128,13 @@ class ResultSetJobDataRead extends ResultSetJobAbstract implements ILoadService<
return getExecutionController();
}
protected static final int PROGRESS_VISUALIZE_PERIOD = 100;
private static final int PROGRESS_VISUALIZE_PERIOD = 100;
private class PumpVisualizer extends UIJob {
private ProgressLoaderVisualizer<Object> visualizer;
public PumpVisualizer(ProgressLoaderVisualizer<Object> visualizer) {
PumpVisualizer(ProgressLoaderVisualizer<Object> visualizer) {
super(DBeaverUI.getDisplay(), "RSV Pump Visualizer");
setSystem(true);
this.visualizer = visualizer;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册