Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
c13a64d7
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c13a64d7
编写于
12月 16, 1998
作者:
V
Vadim B. Mikheev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Serialized mode works!
上级
54c3e652
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
209 addition
and
47 deletion
+209
-47
src/backend/access/transam/transam.c
src/backend/access/transam/transam.c
+9
-19
src/backend/access/transam/xact.c
src/backend/access/transam/xact.c
+7
-1
src/backend/executor/execMain.c
src/backend/executor/execMain.c
+2
-2
src/backend/storage/ipc/shmem.c
src/backend/storage/ipc/shmem.c
+7
-14
src/backend/storage/lmgr/lmgr.c
src/backend/storage/lmgr/lmgr.c
+2
-1
src/backend/tcop/postgres.c
src/backend/tcop/postgres.c
+5
-4
src/backend/utils/time/tqual.c
src/backend/utils/time/tqual.c
+160
-1
src/include/access/transam.h
src/include/access/transam.h
+2
-1
src/include/utils/tqual.h
src/include/utils/tqual.h
+15
-4
未找到文件。
src/backend/access/transam/transam.c
浏览文件 @
c13a64d7
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.2
0 1998/12/15 12:45:30
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.2
1 1998/12/16 11:53:44
vadim Exp $
*
* NOTES
* This file contains the high level access-method interface to the
...
...
@@ -172,12 +172,8 @@ TransactionLogTest(TransactionId transactionId, /* transaction id to test */
if
(
!
fail
)
{
/* must not cache status of running xaction !!! */
if
(
xidstatus
!=
XID_INPROGRESS
)
{
TransactionIdStore
(
transactionId
,
&
cachedTestXid
);
cachedTestXidStatus
=
xidstatus
;
}
TransactionIdStore
(
transactionId
,
&
cachedTestXid
);
cachedTestXidStatus
=
xidstatus
;
return
(
bool
)
(
status
==
xidstatus
);
}
...
...
@@ -230,11 +226,8 @@ TransactionLogUpdate(TransactionId transactionId, /* trans id to update */
*
* What's the hell ?! Why != XID_COMMIT ?!
*/
if
(
status
!=
XID_INPROGRESS
)
{
TransactionIdStore
(
transactionId
,
&
cachedTestXid
);
cachedTestXidStatus
=
status
;
}
TransactionIdStore
(
transactionId
,
&
cachedTestXid
);
cachedTestXidStatus
=
status
;
}
...
...
@@ -588,14 +581,11 @@ TransactionIdAbort(TransactionId transactionId)
TransactionLogUpdate
(
transactionId
,
XID_ABORT
);
}
#ifdef NOT_USED
void
TransactionId
SetInProgress
(
TransactionId
transactionId
)
TransactionId
FlushCache
(
)
{
if
(
AMI_OVERRIDE
)
return
;
Transaction
LogUpdate
(
transactionId
,
XID_INPROGRESS
);
}
Transaction
IdStore
(
AmiTransactionId
,
&
cachedTestXid
);
cachedTestXidStatus
=
XID_COMMIT
;
#endif
}
src/backend/access/transam/xact.c
浏览文件 @
c13a64d7
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.2
6 1998/12/15 12:45:35
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.2
7 1998/12/16 11:53:44
vadim Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
...
...
@@ -516,6 +516,9 @@ CommandCounterIncrement()
/* make cache changes visible to me */
AtCommit_Cache
();
AtStart_Cache
();
TransactionIdFlushCache
();
}
void
...
...
@@ -793,6 +796,9 @@ StartTransaction()
{
TransactionState
s
=
CurrentTransactionState
;
TransactionIdFlushCache
();
FreeXactSnapshot
();
/* ----------------
* Check the current transaction state. If the transaction system
* is switched off, or if we're already in a transaction, do nothing.
...
...
src/backend/executor/execMain.c
浏览文件 @
c13a64d7
...
...
@@ -26,7 +26,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.6
0 1998/12/15 12:46:04
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.6
1 1998/12/16 11:53:45
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -124,7 +124,7 @@ ExecutorStart(QueryDesc *queryDesc, EState *estate)
memset
(
estate
->
es_param_exec_vals
,
0
,
queryDesc
->
plantree
->
nParamExec
*
sizeof
(
ParamExecData
));
}
estate
->
es_snapshot
=
SnapshotNow
;
estate
->
es_snapshot
=
QuerySnapshot
;
result
=
InitPlan
(
queryDesc
->
operation
,
queryDesc
->
parsetree
,
...
...
src/backend/storage/ipc/shmem.c
浏览文件 @
c13a64d7
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.3
2 1998/12/15 12:46:24
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.3
3 1998/12/16 11:53:46
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -633,27 +633,21 @@ TransactionIdIsInProgress(TransactionId xid)
/*
* GetSnapshotData -- returns information about running transactions.
*
* InvalidTransactionId is used as terminator in snapshot->xip array.
* If serialized is true then XID >= current xact ID will not be
* placed in array. Current xact ID are never placed there (just
* to reduce its length, xmin/xmax may be equal to cid).
* MyProc->xmin will be setted if equal to InvalidTransactionId.
*
* Yet another strange func for this place... - vadim 07/21/98
*/
Snapshot
GetSnapshotData
(
bool
serialize
d
)
GetSnapshotData
(
voi
d
)
{
Snapshot
snapshot
=
(
Snapshot
)
malloc
(
sizeof
(
SnapshotData
));
ShmemIndexEnt
*
result
;
PROC
*
proc
;
TransactionId
cid
=
GetCurrentTransactionId
();
uint32
count
=
0
;
uint32
have
=
3
1
;
uint32
have
=
3
2
;
Assert
(
ShmemIndex
);
snapshot
->
xip
=
(
TransactionId
*
)
malloc
(
32
*
sizeof
(
TransactionId
));
snapshot
->
xip
=
(
TransactionId
*
)
malloc
(
have
*
sizeof
(
TransactionId
));
snapshot
->
xmax
=
cid
;
snapshot
->
xmin
=
cid
;
...
...
@@ -667,15 +661,14 @@ GetSnapshotData(bool serialized)
if
(
MyProc
->
xmin
==
InvalidTransactionId
)
MyProc
->
xmin
=
snapshot
->
xmin
;
SpinRelease
(
ShmemIndexLock
);
snapshot
->
x
ip
[
count
]
=
InvalidTransactionId
;
snapshot
->
x
cnt
=
count
;
return
snapshot
;
}
if
(
result
->
location
==
INVALID_OFFSET
||
strncmp
(
result
->
key
,
"PID "
,
4
)
!=
0
)
continue
;
proc
=
(
PROC
*
)
MAKE_PTR
(
result
->
location
);
if
(
proc
==
MyProc
||
proc
->
xid
<
FirstTransactionId
||
(
serialized
&&
proc
->
xid
>=
cid
))
if
(
proc
==
MyProc
||
proc
->
xid
<
FirstTransactionId
)
continue
;
if
(
proc
->
xid
<
snapshot
->
xmin
)
snapshot
->
xmin
=
proc
->
xid
;
...
...
@@ -684,7 +677,7 @@ GetSnapshotData(bool serialized)
if
(
have
==
0
)
{
snapshot
->
xip
=
(
TransactionId
*
)
realloc
(
snapshot
->
xip
,
(
count
+
3
3
)
*
sizeof
(
TransactionId
));
(
count
+
3
2
)
*
sizeof
(
TransactionId
));
have
=
32
;
}
snapshot
->
xip
[
count
]
=
proc
->
xid
;
...
...
src/backend/storage/lmgr/lmgr.c
浏览文件 @
c13a64d7
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.2
0 1998/12/15 12:46:30
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.2
1 1998/12/16 11:53:48
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -325,6 +325,7 @@ XactLockTableWait(TransactionId xid)
LockAcquire
(
LockTableId
,
&
tag
,
ShareLock
);
TransactionIdFlushCache
();
/*
* Transaction was committed/aborted/crashed -
* we have to update pg_log if transaction is still
...
...
src/backend/tcop/postgres.c
浏览文件 @
c13a64d7
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.9
4 1998/10/16 06:05:13 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.9
5 1998/12/16 11:53:52 vadim
Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
...
...
@@ -786,9 +786,10 @@ pg_exec_query_dest(char *query_string, /* string to execute */
}
#endif
/* ----------------
SetQuerySnapshot
();
/*
* execute the plan
*
*/
if
(
ShowExecutorStats
)
ResetUsage
();
...
...
@@ -1519,7 +1520,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[])
if
(
!
IsUnderPostmaster
)
{
puts
(
"
\n
POSTGRES backend interactive interface "
);
puts
(
"$Revision: 1.9
4 $ $Date: 1998/10/16 06:05:13
$
\n
"
);
puts
(
"$Revision: 1.9
5 $ $Date: 1998/12/16 11:53:52
$
\n
"
);
}
/* ----------------
...
...
src/backend/utils/time/tqual.c
浏览文件 @
c13a64d7
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.2
1 1998/12/15 12:46:40
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.2
2 1998/12/16 11:53:55
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -29,6 +29,9 @@ extern bool PostgresIsInitialized;
SnapshotData
SnapshotDirtyData
;
Snapshot
SnapshotDirty
=
&
SnapshotDirtyData
;
Snapshot
QuerySnapshot
=
NULL
;
static
Snapshot
SerializedSnapshot
=
NULL
;
/*
* XXX Transaction system override hacks start here
*/
...
...
@@ -436,3 +439,159 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
return
false
;
/* updated by other */
}
bool
HeapTupleSatisfiesSnapshot
(
HeapTupleHeader
tuple
,
Snapshot
snapshot
)
{
if
(
AMI_OVERRIDE
)
return
true
;
if
(
!
(
tuple
->
t_infomask
&
HEAP_XMIN_COMMITTED
))
{
if
(
tuple
->
t_infomask
&
HEAP_XMIN_INVALID
)
/* xid invalid or
* aborted */
return
false
;
if
(
TransactionIdIsCurrentTransactionId
(
tuple
->
t_xmin
))
{
if
(
CommandIdGEScanCommandId
(
tuple
->
t_cmin
))
return
false
;
/* inserted after scan started */
if
(
tuple
->
t_infomask
&
HEAP_XMAX_INVALID
)
/* xid invalid */
return
true
;
Assert
(
TransactionIdIsCurrentTransactionId
(
tuple
->
t_xmax
));
if
(
tuple
->
t_infomask
&
HEAP_MARKED_FOR_UPDATE
)
return
true
;
if
(
CommandIdGEScanCommandId
(
tuple
->
t_cmax
))
return
true
;
/* deleted after scan started */
else
return
false
;
/* deleted before scan started */
}
/*
* this call is VERY expensive - requires a log table lookup.
*/
if
(
!
TransactionIdDidCommit
(
tuple
->
t_xmin
))
{
if
(
TransactionIdDidAbort
(
tuple
->
t_xmin
))
tuple
->
t_infomask
|=
HEAP_XMIN_INVALID
;
/* aborted */
return
false
;
}
tuple
->
t_infomask
|=
HEAP_XMIN_COMMITTED
;
}
/*
* By here, the inserting transaction has committed -
* have to check when...
*/
if
(
tuple
->
t_xmin
>=
snapshot
->
xmax
)
return
false
;
if
(
tuple
->
t_xmin
>=
snapshot
->
xmin
)
{
uint32
i
;
for
(
i
=
0
;
i
<
snapshot
->
xcnt
;
i
++
)
{
if
(
tuple
->
t_xmin
==
snapshot
->
xip
[
i
])
return
false
;
}
}
if
(
tuple
->
t_infomask
&
HEAP_XMAX_INVALID
)
/* xid invalid or aborted */
return
true
;
if
(
tuple
->
t_infomask
&
HEAP_MARKED_FOR_UPDATE
)
return
true
;
if
(
!
(
tuple
->
t_infomask
&
HEAP_XMAX_COMMITTED
))
{
if
(
TransactionIdIsCurrentTransactionId
(
tuple
->
t_xmax
))
{
if
(
CommandIdGEScanCommandId
(
tuple
->
t_cmax
))
return
true
;
/* deleted after scan started */
else
return
false
;
/* deleted before scan started */
}
if
(
!
TransactionIdDidCommit
(
tuple
->
t_xmax
))
{
if
(
TransactionIdDidAbort
(
tuple
->
t_xmax
))
tuple
->
t_infomask
|=
HEAP_XMAX_INVALID
;
/* aborted */
return
true
;
}
/* xmax transaction committed */
tuple
->
t_infomask
|=
HEAP_XMAX_COMMITTED
;
}
if
(
tuple
->
t_xmax
>=
snapshot
->
xmax
)
return
true
;
if
(
tuple
->
t_xmax
>=
snapshot
->
xmin
)
{
uint32
i
;
for
(
i
=
0
;
i
<
snapshot
->
xcnt
;
i
++
)
{
if
(
tuple
->
t_xmax
==
snapshot
->
xip
[
i
])
return
true
;
}
}
return
false
;
}
void
SetQuerySnapshot
(
void
)
{
/* 1st call in xaction */
if
(
SerializedSnapshot
==
NULL
)
{
SerializedSnapshot
=
GetSnapshotData
();
QuerySnapshot
=
SerializedSnapshot
;
Assert
(
QuerySnapshot
!=
NULL
);
return
;
}
if
(
QuerySnapshot
!=
SerializedSnapshot
)
{
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
);
}
if
(
XactIsoLevel
==
XACT_SERIALIZED
)
QuerySnapshot
=
SerializedSnapshot
;
else
QuerySnapshot
=
GetSnapshotData
();
Assert
(
QuerySnapshot
!=
NULL
);
}
void
FreeXactSnapshot
(
void
)
{
if
(
QuerySnapshot
!=
NULL
&&
QuerySnapshot
!=
SerializedSnapshot
)
{
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
);
}
QuerySnapshot
=
NULL
;
if
(
SerializedSnapshot
!=
NULL
)
{
free
(
SerializedSnapshot
->
xip
);
free
(
SerializedSnapshot
);
}
SerializedSnapshot
=
NULL
;
}
src/include/access/transam.h
浏览文件 @
c13a64d7
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: transam.h,v 1.1
6 1998/09/01 04:34:31 momjian
Exp $
* $Id: transam.h,v 1.1
7 1998/12/16 11:52:10 vadim
Exp $
*
* NOTES
* Transaction System Version 101 now support proper oid
...
...
@@ -145,6 +145,7 @@ extern bool TransactionIdDidCommit(TransactionId transactionId);
extern
bool
TransactionIdDidAbort
(
TransactionId
transactionId
);
extern
void
TransactionIdCommit
(
TransactionId
transactionId
);
extern
void
TransactionIdAbort
(
TransactionId
transactionId
);
extern
void
TransactionIdFlushCache
(
void
);
/* in transam/transsup.c */
extern
void
AmiTransactionOverride
(
bool
flag
);
...
...
src/include/utils/tqual.h
浏览文件 @
c13a64d7
...
...
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: tqual.h,v 1.1
6 1998/12/15 12:47:0
1 vadim Exp $
* $Id: tqual.h,v 1.1
7 1998/12/16 11:52:1
1 vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -19,7 +19,8 @@
typedef
struct
SnapshotData
{
TransactionId
xmin
;
/* XID < xmin are visible to me */
TransactionId
xmax
;
/* XID > xmax are invisible to me */
TransactionId
xmax
;
/* XID >= xmax are invisible to me */
uint32
xcnt
;
/* # of xact below */
TransactionId
*
xip
;
/* array of xacts in progress */
}
SnapshotData
;
...
...
@@ -27,7 +28,9 @@ typedef SnapshotData *Snapshot;
#define SnapshotNow ((Snapshot) 0x0)
#define SnapshotSelf ((Snapshot) 0x1)
extern
Snapshot
SnapshotDirty
;
extern
Snapshot
QuerySnapshot
;
#define IsSnapshotNow(snapshot) ((Snapshot) snapshot == SnapshotNow)
#define IsSnapshotSelf(snapshot) ((Snapshot) snapshot == SnapshotSelf)
...
...
@@ -55,7 +58,11 @@ extern CommandId HeapSpecialCommandId;
((IsSnapshotDirty(snapshot)) ? \
HeapTupleSatisfiesDirty((tuple)->t_data) \
: \
HeapTupleSatisfiesNow((tuple)->t_data) \
((IsSnapshotNow(snapshot)) ? \
HeapTupleSatisfiesNow((tuple)->t_data) \
: \
HeapTupleSatisfiesSnapshot((tuple)->t_data, snapshot) \
) \
) \
) \
)
...
...
@@ -87,9 +94,13 @@ extern CommandId HeapSpecialCommandId;
extern
bool
HeapTupleSatisfiesItself
(
HeapTupleHeader
tuple
);
extern
bool
HeapTupleSatisfiesNow
(
HeapTupleHeader
tuple
);
extern
bool
HeapTupleSatisfiesDirty
(
HeapTupleHeader
tuple
);
extern
bool
HeapTupleSatisfiesSnapshot
(
HeapTupleHeader
tuple
,
Snapshot
snapshot
);
extern
int
HeapTupleSatisfiesUpdate
(
HeapTuple
tuple
);
extern
void
setheapoverride
(
bool
on
);
extern
Snapshot
GetSnapshotData
(
bool
serialized
);
extern
Snapshot
GetSnapshotData
(
void
);
extern
void
SetQuerySnapshot
(
void
);
extern
void
FreeXactSnapshot
(
void
);
#endif
/* TQUAL_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录