Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
cfbe2378
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dbeaver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cfbe2378
编写于
8月 08, 2019
作者:
S
Serge Rider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#6479 Abortedtransaction auto-recovery
上级
6e509b88
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
53 addition
and
10 deletion
+53
-10
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreConstants.java
...rc/org/jkiss/dbeaver/ext/postgresql/PostgreConstants.java
+3
-1
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataSource.java
...jkiss/dbeaver/ext/postgresql/model/PostgreDataSource.java
+3
-1
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPErrorAssistant.java
....model/src/org/jkiss/dbeaver/model/DBPErrorAssistant.java
+2
-1
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBExecUtils.java
...r.model/src/org/jkiss/dbeaver/model/exec/DBExecUtils.java
+17
-6
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/runtime/jobs/InvalidateJob.java
...del/src/org/jkiss/dbeaver/runtime/jobs/InvalidateJob.java
+28
-1
未找到文件。
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreConstants.java
浏览文件 @
cfbe2378
...
...
@@ -88,7 +88,7 @@ public class PostgreConstants {
public
static
final
String
HANDLER_SSL
=
"postgre_ssl"
;
/**
* @see
https://www.postgresql.org/docs/9.2/static/errcodes-appendix.html
* @see
[https://www.postgresql.org/docs/9.2/static/errcodes-appendix.html]
*/
public
static
final
String
EC_PERMISSION_DENIED
=
"42501"
;
//$NON-NLS-1$
public
static
final
String
EC_QUERY_CANCELED
=
"57014"
;
//$NON-NLS-1$
...
...
@@ -111,6 +111,8 @@ public class PostgreConstants {
public
static
final
String
TYPE_FLOAT8
=
"float8"
;
public
static
final
String
ERROR_ADMIN_SHUTDOWN
=
"57P01"
;
public
static
final
String
ERROR_TRANSACTION_ABORTED
=
"25P02"
;
public
static
final
String
PSQL_EXCEPTION_CLASS_NAME
=
"org.postgresql.util.PSQLException"
;
public
static
final
String
COLLATION_DEFAULT
=
"default"
;
...
...
plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataSource.java
浏览文件 @
cfbe2378
...
...
@@ -550,11 +550,13 @@ public class PostgreDataSource extends JDBCDataSource implements DBSObjectSelect
}
@Override
public
ErrorType
discoverErrorType
(
Throwable
error
)
{
public
ErrorType
discoverErrorType
(
@NotNull
Throwable
error
)
{
String
sqlState
=
SQLState
.
getStateFromException
(
error
);
if
(
sqlState
!=
null
)
{
if
(
PostgreConstants
.
ERROR_ADMIN_SHUTDOWN
.
equals
(
sqlState
))
{
return
ErrorType
.
CONNECTION_LOST
;
}
else
if
(
PostgreConstants
.
ERROR_TRANSACTION_ABORTED
.
equals
(
sqlState
))
{
return
ErrorType
.
TRANSACTION_ABORTED
;
}
}
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPErrorAssistant.java
浏览文件 @
cfbe2378
...
...
@@ -32,7 +32,8 @@ public interface DBPErrorAssistant
CONNECTION_LOST
,
DRIVER_CLASS_MISSING
,
PERMISSION_DENIED
,
FEATURE_UNSUPPORTED
FEATURE_UNSUPPORTED
,
TRANSACTION_ABORTED
}
class
ErrorPosition
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/exec/DBExecUtils.java
浏览文件 @
cfbe2378
...
...
@@ -148,10 +148,15 @@ public class DBExecUtils {
break
;
}
catch
(
InvocationTargetException
e
)
{
lastError
=
e
.
getTargetException
();
if
(!
recoverEnabled
||
discoverErrorType
(
dataSource
,
lastError
)
!=
DBPErrorAssistant
.
ErrorType
.
CONNECTION_LOST
)
{
if
(!
recoverEnabled
)
{
// Can't recover
break
;
}
DBPErrorAssistant
.
ErrorType
errorType
=
discoverErrorType
(
dataSource
,
lastError
);
if
(
errorType
!=
DBPErrorAssistant
.
ErrorType
.
TRANSACTION_ABORTED
&&
errorType
!=
DBPErrorAssistant
.
ErrorType
.
CONNECTION_LOST
)
{
// Some other error
break
;
}
log
.
debug
(
"Invalidate datasource '"
+
dataSource
.
getContainer
().
getName
()
+
"' connections..."
);
DBRProgressMonitor
monitor
;
if
(
param
instanceof
DBRProgressMonitor
)
{
...
...
@@ -162,6 +167,11 @@ public class DBExecUtils {
monitor
=
new
VoidProgressMonitor
();
}
if
(!
monitor
.
isCanceled
())
{
if
(
errorType
==
DBPErrorAssistant
.
ErrorType
.
TRANSACTION_ABORTED
)
{
// Transaction aborted
InvalidateJob
.
invalidateTransaction
(
monitor
,
dataSource
);
}
else
{
// Do not recover if connection was canceled
InvalidateJob
.
invalidateDataSource
(
monitor
,
dataSource
,
false
,
()
->
DBWorkbench
.
getPlatformUI
().
openConnectionEditor
(
dataSource
.
getContainer
()));
...
...
@@ -169,6 +179,7 @@ public class DBExecUtils {
log
.
error
(
"Operation failed. Retry count remains = "
+
(
tryCount
-
i
-
1
),
lastError
);
}
}
}
}
catch
(
InterruptedException
e
)
{
log
.
error
(
"Operation interrupted"
);
return
false
;
...
...
plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/runtime/jobs/InvalidateJob.java
浏览文件 @
cfbe2378
...
...
@@ -22,7 +22,8 @@ import org.jkiss.dbeaver.Log;
import
org.jkiss.dbeaver.model.DBPDataSource
;
import
org.jkiss.dbeaver.model.DBPDataSourceContainer
;
import
org.jkiss.dbeaver.model.DBPMessageType
;
import
org.jkiss.dbeaver.model.exec.DBCExecutionContext
;
import
org.jkiss.dbeaver.model.DBUtils
;
import
org.jkiss.dbeaver.model.exec.*
;
import
org.jkiss.dbeaver.model.net.DBWNetworkHandler
;
import
org.jkiss.dbeaver.model.runtime.DBRProgressMonitor
;
import
org.jkiss.dbeaver.model.struct.DBSInstance
;
...
...
@@ -182,6 +183,32 @@ public class InvalidateJob extends DataSourceJob
return
invalidateResults
;
}
public
static
void
invalidateTransaction
(
DBRProgressMonitor
monitor
,
DBPDataSource
dataSource
)
{
// Invalidate transactions
monitor
.
subTask
(
"Invalidate transactions of ["
+
dataSource
.
getContainer
().
getName
()
+
"]"
);
for
(
DBSInstance
instance
:
dataSource
.
getAvailableInstances
())
{
for
(
DBCExecutionContext
context
:
instance
.
getAllContexts
())
{
invalidateTransaction
(
monitor
,
context
);
}
}
}
public
static
void
invalidateTransaction
(
DBRProgressMonitor
monitor
,
DBCExecutionContext
context
)
{
DBCTransactionManager
txnManager
=
DBUtils
.
getTransactionManager
(
context
);
if
(
txnManager
!=
null
)
{
try
{
if
(!
txnManager
.
isAutoCommit
())
{
try
(
DBCSession
session
=
context
.
openSession
(
monitor
,
DBCExecutionPurpose
.
UTIL
,
"Rollback failed transaction"
))
{
txnManager
.
rollback
(
session
,
null
);
}
}
}
catch
(
DBCException
e
)
{
log
.
error
(
"Error invalidating aborted transaction"
,
e
);
}
}
}
@Override
protected
void
canceling
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录