Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
e319e679
Commit
e319e679
authored
Jan 16, 2010
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix bogus initialization of KnownAssignedXids shared memory state ---
didn't work in EXEC_BACKEND case.
parent
8bfd1a88
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
44 deletions
+34
-44
src/backend/storage/ipc/procarray.c
src/backend/storage/ipc/procarray.c
+34
-44
No files found.
src/backend/storage/ipc/procarray.c
View file @
e319e679
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/storage/ipc/procarray.c,v 1.5
6 2010/01/16 10:05:50 sriggs
Exp $
* $PostgreSQL: pgsql/src/backend/storage/ipc/procarray.c,v 1.5
7 2010/01/16 17:17:26 tgl
Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -135,8 +135,6 @@ static void DisplayXidCache(void);
...
@@ -135,8 +135,6 @@ static void DisplayXidCache(void);
#endif
/* XIDCACHE_DEBUG */
#endif
/* XIDCACHE_DEBUG */
/* Primitives for KnownAssignedXids array handling for standby */
/* Primitives for KnownAssignedXids array handling for standby */
static
Size
KnownAssignedXidsShmemSize
(
int
size
);
static
void
KnownAssignedXidsInit
(
int
size
);
static
int
KnownAssignedXidsGet
(
TransactionId
*
xarray
,
TransactionId
xmax
);
static
int
KnownAssignedXidsGet
(
TransactionId
*
xarray
,
TransactionId
xmax
);
static
int
KnownAssignedXidsGetAndSetXmin
(
TransactionId
*
xarray
,
TransactionId
*
xmin
,
static
int
KnownAssignedXidsGetAndSetXmin
(
TransactionId
*
xarray
,
TransactionId
*
xmin
,
TransactionId
xmax
);
TransactionId
xmax
);
...
@@ -161,16 +159,19 @@ ProcArrayShmemSize(void)
...
@@ -161,16 +159,19 @@ ProcArrayShmemSize(void)
size
=
add_size
(
size
,
mul_size
(
sizeof
(
PGPROC
*
),
PROCARRAY_MAXPROCS
));
size
=
add_size
(
size
,
mul_size
(
sizeof
(
PGPROC
*
),
PROCARRAY_MAXPROCS
));
/*
/*
* During recovery processing we have a data structure called KnownAssignedXids,
* During recovery processing we have a data structure called
* created in shared memory. Local data structures are also created in various
* KnownAssignedXids, created in shared memory. Local data structures are
* backends during GetSnapshotData(), TransactionIdIsInProgress() and
* also created in various backends during GetSnapshotData(),
* GetRunningTransactionData(). All of the main structures created in those
* TransactionIdIsInProgress() and GetRunningTransactionData(). All of the
* functions must be identically sized, since we may at times copy the whole
* main structures created in those functions must be identically sized,
* of the data structures around. We refer to this as TOTAL_MAX_CACHED_SUBXIDS.
* since we may at times copy the whole of the data structures around. We
* refer to this size as TOTAL_MAX_CACHED_SUBXIDS.
*/
*/
#define TOTAL_MAX_CACHED_SUBXIDS ((PGPROC_MAX_CACHED_SUBXIDS + 1) * PROCARRAY_MAXPROCS)
#define TOTAL_MAX_CACHED_SUBXIDS ((PGPROC_MAX_CACHED_SUBXIDS + 1) * PROCARRAY_MAXPROCS)
if
(
XLogRequestRecoveryConnections
)
if
(
XLogRequestRecoveryConnections
)
size
=
add_size
(
size
,
KnownAssignedXidsShmemSize
(
TOTAL_MAX_CACHED_SUBXIDS
));
size
=
add_size
(
size
,
hash_estimate_size
(
TOTAL_MAX_CACHED_SUBXIDS
,
sizeof
(
TransactionId
)));
return
size
;
return
size
;
}
}
...
@@ -186,8 +187,8 @@ CreateSharedProcArray(void)
...
@@ -186,8 +187,8 @@ CreateSharedProcArray(void)
/* Create or attach to the ProcArray shared structure */
/* Create or attach to the ProcArray shared structure */
procArray
=
(
ProcArrayStruct
*
)
procArray
=
(
ProcArrayStruct
*
)
ShmemInitStruct
(
"Proc Array"
,
ShmemInitStruct
(
"Proc Array"
,
mul_size
(
sizeof
(
PGPROC
*
),
PROCARRAY_MAXPROCS
),
mul_size
(
sizeof
(
PGPROC
*
),
PROCARRAY_MAXPROCS
),
&
found
);
&
found
);
if
(
!
found
)
if
(
!
found
)
{
{
...
@@ -197,9 +198,28 @@ CreateSharedProcArray(void)
...
@@ -197,9 +198,28 @@ CreateSharedProcArray(void)
/* Normal processing */
/* Normal processing */
procArray
->
numProcs
=
0
;
procArray
->
numProcs
=
0
;
procArray
->
maxProcs
=
PROCARRAY_MAXPROCS
;
procArray
->
maxProcs
=
PROCARRAY_MAXPROCS
;
procArray
->
numKnownAssignedXids
=
0
;
procArray
->
maxKnownAssignedXids
=
TOTAL_MAX_CACHED_SUBXIDS
;
procArray
->
lastOverflowedXid
=
InvalidTransactionId
;
}
if
(
XLogRequestRecoveryConnections
)
if
(
XLogRequestRecoveryConnections
)
KnownAssignedXidsInit
(
TOTAL_MAX_CACHED_SUBXIDS
);
{
/* Create or attach to the KnownAssignedXids hash table */
HASHCTL
info
;
MemSet
(
&
info
,
0
,
sizeof
(
info
));
info
.
keysize
=
sizeof
(
TransactionId
);
info
.
entrysize
=
sizeof
(
TransactionId
);
info
.
hash
=
tag_hash
;
KnownAssignedXidsHash
=
ShmemInitHash
(
"KnownAssignedXids Hash"
,
TOTAL_MAX_CACHED_SUBXIDS
,
TOTAL_MAX_CACHED_SUBXIDS
,
&
info
,
HASH_ELEM
|
HASH_FUNCTION
);
if
(
!
KnownAssignedXidsHash
)
elog
(
FATAL
,
"could not initialize known assigned xids hash table"
);
}
}
}
}
...
@@ -2291,36 +2311,6 @@ ExpireOldKnownAssignedTransactionIds(TransactionId xid)
...
@@ -2291,36 +2311,6 @@ ExpireOldKnownAssignedTransactionIds(TransactionId xid)
* high availability. So we choose to implement as a hash table.
* high availability. So we choose to implement as a hash table.
*/
*/
static
Size
KnownAssignedXidsShmemSize
(
int
size
)
{
return
hash_estimate_size
(
size
,
sizeof
(
TransactionId
));
}
static
void
KnownAssignedXidsInit
(
int
size
)
{
HASHCTL
info
;
/* assume no locking is needed yet */
info
.
keysize
=
sizeof
(
TransactionId
);
info
.
entrysize
=
sizeof
(
TransactionId
);
info
.
hash
=
tag_hash
;
KnownAssignedXidsHash
=
ShmemInitHash
(
"KnownAssignedXids Hash"
,
size
,
size
,
&
info
,
HASH_ELEM
|
HASH_FUNCTION
);
if
(
!
KnownAssignedXidsHash
)
elog
(
FATAL
,
"could not initialize known assigned xids hash table"
);
procArray
->
numKnownAssignedXids
=
0
;
procArray
->
maxKnownAssignedXids
=
TOTAL_MAX_CACHED_SUBXIDS
;
procArray
->
lastOverflowedXid
=
InvalidTransactionId
;
}
/*
/*
* Add xids into KnownAssignedXids.
* Add xids into KnownAssignedXids.
*
*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment