Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
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
nexedi
MariaDB
Commits
f00d8329
Commit
f00d8329
authored
Apr 18, 2006
by
jonas@perch.ndb.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge perch.ndb.mysql.com:/home/jonas/src/51-work
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
parents
d878c904
fe44dedb
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
102 additions
and
36 deletions
+102
-36
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+37
-15
storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
+42
-19
storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
+23
-2
No files found.
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
View file @
f00d8329
...
@@ -5016,12 +5016,13 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
...
@@ -5016,12 +5016,13 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
Uint32 nextNodeId = regTcPtr->nextReplica;
Uint32 nextNodeId = regTcPtr->nextReplica;
Uint32 nextVersion = getNodeInfo(nextNodeId).m_version;
Uint32 nextVersion = getNodeInfo(nextNodeId).m_version;
UintR TAiLen = regTcPtr->reclenAiLqhkey;
UintR TapplAddressIndicator = (regTcPtr->nextSeqNoReplica == 0 ? 0 : 1);
UintR TapplAddressIndicator = (regTcPtr->nextSeqNoReplica == 0 ? 0 : 1);
LqhKeyReq::setApplicationAddressFlag(Treqinfo, TapplAddressIndicator);
LqhKeyReq::setApplicationAddressFlag(Treqinfo, TapplAddressIndicator);
LqhKeyReq::setInterpretedFlag(Treqinfo, regTcPtr->opExec);
LqhKeyReq::setInterpretedFlag(Treqinfo, regTcPtr->opExec);
LqhKeyReq::setSeqNoReplica(Treqinfo, regTcPtr->nextSeqNoReplica);
LqhKeyReq::setSeqNoReplica(Treqinfo, regTcPtr->nextSeqNoReplica);
LqhKeyReq
::
setAIInLqhKeyReq
(
Treqinfo
,
regTcPtr
->
reclenAiLqhkey
);
LqhKeyReq::setAIInLqhKeyReq(Treqinfo,
TAiLen
);
if (unlikely(nextVersion < NDBD_ROWID_VERSION))
if (unlikely(nextVersion < NDBD_ROWID_VERSION))
{
{
...
@@ -5124,22 +5125,32 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
...
@@ -5124,22 +5125,32 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
lqhKeyReq->variableData[nextPos + 0] = sig0;
lqhKeyReq->variableData[nextPos + 0] = sig0;
nextPos += LqhKeyReq::getGCIFlag(Treqinfo);
nextPos += LqhKeyReq::getGCIFlag(Treqinfo);
sig0
=
regTcPtr
->
firstAttrinfo
[
0
];
sig1
=
regTcPtr
->
firstAttrinfo
[
1
];
sig2
=
regTcPtr
->
firstAttrinfo
[
2
];
sig3
=
regTcPtr
->
firstAttrinfo
[
3
];
sig4
=
regTcPtr
->
firstAttrinfo
[
4
];
UintR
TAiLen
=
regTcPtr
->
reclenAiLqhkey
;
BlockReference lqhRef = calcLqhBlockRef(regTcPtr->nextReplica);
BlockReference lqhRef = calcLqhBlockRef(regTcPtr->nextReplica);
if (likely(nextPos + TAiLen + LqhKeyReq::FixedSignalLength <= 25))
{
jam();
sig0 = regTcPtr->firstAttrinfo[0];
sig1 = regTcPtr->firstAttrinfo[1];
sig2 = regTcPtr->firstAttrinfo[2];
sig3 = regTcPtr->firstAttrinfo[3];
sig4 = regTcPtr->firstAttrinfo[4];
lqhKeyReq
->
variableData
[
nextPos
]
=
sig0
;
lqhKeyReq->variableData[nextPos] = sig0;
lqhKeyReq
->
variableData
[
nextPos
+
1
]
=
sig1
;
lqhKeyReq->variableData[nextPos + 1] = sig1;
lqhKeyReq
->
variableData
[
nextPos
+
2
]
=
sig2
;
lqhKeyReq->variableData[nextPos + 2] = sig2;
lqhKeyReq
->
variableData
[
nextPos
+
3
]
=
sig3
;
lqhKeyReq->variableData[nextPos + 3] = sig3;
lqhKeyReq
->
variableData
[
nextPos
+
4
]
=
sig4
;
lqhKeyReq->variableData[nextPos + 4] = sig4;
nextPos
+=
TAiLen
;
nextPos += TAiLen;
TAiLen = 0;
}
else
{
Treqinfo &= ~(Uint32)(RI_AI_IN_THIS_MASK << RI_AI_IN_THIS_SHIFT);
lqhKeyReq->requestInfo = Treqinfo;
}
sendSignal(lqhRef, GSN_LQHKEYREQ, signal,
sendSignal(lqhRef, GSN_LQHKEYREQ, signal,
nextPos + LqhKeyReq::FixedSignalLength, JBB);
nextPos + LqhKeyReq::FixedSignalLength, JBB);
if (regTcPtr->primKeyLen > 4) {
if (regTcPtr->primKeyLen > 4) {
...
@@ -5165,6 +5176,17 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
...
@@ -5165,6 +5176,17 @@ void Dblqh::packLqhkeyreqLab(Signal* signal)
signal->theData[0] = sig0;
signal->theData[0] = sig0;
signal->theData[1] = sig1;
signal->theData[1] = sig1;
signal->theData[2] = sig2;
signal->theData[2] = sig2;
if (unlikely(nextPos + TAiLen + LqhKeyReq::FixedSignalLength > 25))
{
jam();
/**
* 4 replicas...
*/
memcpy(signal->theData+3, regTcPtr->firstAttrinfo, TAiLen << 2);
sendSignal(lqhRef, GSN_ATTRINFO, signal, 3 + TAiLen, JBB);
}
AttrbufPtr regAttrinbufptr;
AttrbufPtr regAttrinbufptr;
regAttrinbufptr.i = regTcPtr->firstAttrinbuf;
regAttrinbufptr.i = regTcPtr->firstAttrinbuf;
while (regAttrinbufptr.i != RNIL) {
while (regAttrinbufptr.i != RNIL) {
...
...
storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
View file @
f00d8329
...
@@ -312,11 +312,12 @@ void AsyncFile::openReq(Request* request)
...
@@ -312,11 +312,12 @@ void AsyncFile::openReq(Request* request)
Uint32
new_flags
=
0
;
Uint32
new_flags
=
0
;
// Convert file open flags from Solaris to Liux
// Convert file open flags from Solaris to Liux
if
(
flags
&
FsOpenReq
::
OM_CREATE
){
if
(
flags
&
FsOpenReq
::
OM_CREATE
)
{
new_flags
|=
O_CREAT
;
new_flags
|=
O_CREAT
;
}
}
if
(
flags
&
FsOpenReq
::
OM_TRUNCATE
){
if
(
flags
&
FsOpenReq
::
OM_TRUNCATE
){
#if 0
#if 0
if(Global_unlinkO_CREAT){
if(Global_unlinkO_CREAT){
unlink(theFileName.c_str());
unlink(theFileName.c_str());
...
@@ -330,25 +331,25 @@ void AsyncFile::openReq(Request* request)
...
@@ -330,25 +331,25 @@ void AsyncFile::openReq(Request* request)
m_syncFrequency
=
1024
*
1024
;
// Hard coded to 1M
m_syncFrequency
=
1024
*
1024
;
// Hard coded to 1M
}
}
if
(
flags
&
FsOpenReq
::
OM_APPEND
){
if
(
flags
&
FsOpenReq
::
OM_APPEND
){
new_flags
|=
O_APPEND
;
new_flags
|=
O_APPEND
;
}
}
if
((
flags
&
FsOpenReq
::
OM_SYNC
)
&&
!
(
flags
&
FsOpenReq
::
OM_INIT
))
if
((
flags
&
FsOpenReq
::
OM_SYNC
)
&&
!
(
flags
&
FsOpenReq
::
OM_INIT
))
{
{
#ifdef O_SYNC
#ifdef O_SYNC
new_flags
|=
O_SYNC
;
new_flags
|=
O_SYNC
;
#endif
#endif
}
}
#ifndef NDB_NO_O_DIRECT
/* to allow tmpfs */
//
#ifndef NDB_NO_O_DIRECT /* to allow tmpfs */
#ifdef O_DIRECT
#ifdef O_DIRECT
if
(
flags
&
FsOpenReq
::
OM_DIRECT
)
if
(
flags
&
FsOpenReq
::
OM_DIRECT
)
{
{
new_flags
|=
O_DIRECT
;
new_flags
|=
O_DIRECT
;
}
}
#endif
#endif
#endif
//
#endif
switch
(
flags
&
0x3
){
switch
(
flags
&
0x3
){
case
FsOpenReq
:
:
OM_READONLY
:
case
FsOpenReq
:
:
OM_READONLY
:
...
@@ -370,8 +371,14 @@ void AsyncFile::openReq(Request* request)
...
@@ -370,8 +371,14 @@ void AsyncFile::openReq(Request* request)
const
int
mode
=
S_IRUSR
|
S_IWUSR
|
const
int
mode
=
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
|
S_IRGRP
|
S_IWGRP
|
S_IROTH
|
S_IWOTH
;
S_IROTH
|
S_IWOTH
;
if
(
flags
&
FsOpenReq
::
OM_CREATE_IF_NONE
){
if
(
flags
&
FsOpenReq
::
OM_CREATE_IF_NONE
)
if
((
theFd
=
::
open
(
theFileName
.
c_str
(),
new_flags
,
mode
))
!=
-
1
)
{
{
Uint32
tmp_flags
=
new_flags
;
#ifdef O_DIRECT
tmp_flags
&=
~
O_DIRECT
;
#endif
if
((
theFd
=
::
open
(
theFileName
.
c_str
(),
tmp_flags
,
mode
))
!=
-
1
)
{
close
(
theFd
);
close
(
theFd
);
request
->
error
=
FsRef
::
fsErrFileExists
;
request
->
error
=
FsRef
::
fsErrFileExists
;
return
;
return
;
...
@@ -379,35 +386,51 @@ void AsyncFile::openReq(Request* request)
...
@@ -379,35 +386,51 @@ void AsyncFile::openReq(Request* request)
new_flags
|=
O_CREAT
;
new_flags
|=
O_CREAT
;
}
}
if
(
-
1
==
(
theFd
=
::
open
(
theFileName
.
c_str
(),
new_flags
,
mode
)))
{
no_odirect:
if
(
-
1
==
(
theFd
=
::
open
(
theFileName
.
c_str
(),
new_flags
,
mode
)))
{
PRINT_ERRORANDFLAGS
(
new_flags
);
PRINT_ERRORANDFLAGS
(
new_flags
);
if
(
(
errno
==
ENOENT
)
&&
(
new_flags
&
O_CREAT
)
)
{
if
((
errno
==
ENOENT
)
&&
(
new_flags
&
O_CREAT
))
{
createDirectories
();
createDirectories
();
if
(
-
1
==
(
theFd
=
::
open
(
theFileName
.
c_str
(),
new_flags
,
mode
)))
{
if
(
-
1
==
(
theFd
=
::
open
(
theFileName
.
c_str
(),
new_flags
,
mode
)))
{
PRINT_ERRORANDFLAGS
(
new_flags
);
PRINT_ERRORANDFLAGS
(
new_flags
);
request
->
error
=
errno
;
request
->
error
=
errno
;
return
;
return
;
}
}
}
else
{
}
#ifdef O_DIRECT
else
if
(
new_flags
&
O_DIRECT
)
{
new_flags
&=
~
O_DIRECT
;
goto
no_odirect
;
}
#endif
else
{
request
->
error
=
errno
;
request
->
error
=
errno
;
return
;
return
;
}
}
}
}
if
(
flags
&
FsOpenReq
::
OM_CHECK_SIZE
)
if
(
flags
&
FsOpenReq
::
OM_CHECK_SIZE
)
{
{
struct
stat
buf
;
struct
stat
buf
;
if
((
fstat
(
theFd
,
&
buf
)
==
-
1
))
if
((
fstat
(
theFd
,
&
buf
)
==
-
1
))
{
{
request
->
error
=
errno
;
request
->
error
=
errno
;
}
else
if
(
buf
.
st_size
!=
request
->
par
.
open
.
file_size
){
}
else
if
(
buf
.
st_size
!=
request
->
par
.
open
.
file_size
)
{
request
->
error
=
FsRef
::
fsErrInvalidFileSize
;
request
->
error
=
FsRef
::
fsErrInvalidFileSize
;
}
}
if
(
request
->
error
)
if
(
request
->
error
)
return
;
return
;
}
}
if
(
flags
&
FsOpenReq
::
OM_INIT
){
if
(
flags
&
FsOpenReq
::
OM_INIT
)
{
off_t
off
=
0
;
off_t
off
=
0
;
const
off_t
sz
=
request
->
par
.
open
.
file_size
;
const
off_t
sz
=
request
->
par
.
open
.
file_size
;
Uint32
tmp
[
sizeof
(
SignalHeader
)
+
25
];
Uint32
tmp
[
sizeof
(
SignalHeader
)
+
25
];
...
...
storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
View file @
f00d8329
...
@@ -1279,6 +1279,23 @@ find_bucket(Vector<Gci_container> * active, Uint64 gci)
...
@@ -1279,6 +1279,23 @@ find_bucket(Vector<Gci_container> * active, Uint64 gci)
return
find_bucket_chained
(
active
,
gci
);
return
find_bucket_chained
(
active
,
gci
);
}
}
static
void
crash_on_invalid_SUB_GCP_COMPLETE_REP
(
const
Gci_container
*
bucket
,
const
SubGcpCompleteRep
*
const
rep
,
Uint32
nodes
)
{
Uint32
old_cnt
=
bucket
->
m_gcp_complete_rep_count
;
ndbout_c
(
"INVALID SUB_GCP_COMPLETE_REP"
);
ndbout_c
(
"gci: %d"
,
rep
->
gci
);
ndbout_c
(
"sender: %x"
,
rep
->
senderRef
);
ndbout_c
(
"count: %d"
,
rep
->
gcp_complete_rep_count
);
ndbout_c
(
"bucket count: %u"
,
old_cnt
);
ndbout_c
(
"nodes: %u"
,
nodes
);
abort
();
}
void
void
NdbEventBuffer
::
execSUB_GCP_COMPLETE_REP
(
const
SubGcpCompleteRep
*
const
rep
)
NdbEventBuffer
::
execSUB_GCP_COMPLETE_REP
(
const
SubGcpCompleteRep
*
const
rep
)
{
{
...
@@ -1317,9 +1334,13 @@ NdbEventBuffer::execSUB_GCP_COMPLETE_REP(const SubGcpCompleteRep * const rep)
...
@@ -1317,9 +1334,13 @@ NdbEventBuffer::execSUB_GCP_COMPLETE_REP(const SubGcpCompleteRep * const rep)
old_cnt
=
m_system_nodes
;
old_cnt
=
m_system_nodes
;
}
}
assert
(
old_cnt
>=
cnt
);
//assert(old_cnt >= cnt);
if
(
unlikely
(
!
(
old_cnt
>=
cnt
)))
{
crash_on_invalid_SUB_GCP_COMPLETE_REP
(
bucket
,
rep
,
m_system_nodes
);
}
bucket
->
m_gcp_complete_rep_count
=
old_cnt
-
cnt
;
bucket
->
m_gcp_complete_rep_count
=
old_cnt
-
cnt
;
if
(
old_cnt
==
cnt
)
if
(
old_cnt
==
cnt
)
{
{
if
(
likely
(
gci
==
m_latestGCI
+
1
||
m_latestGCI
==
0
))
if
(
likely
(
gci
==
m_latestGCI
+
1
||
m_latestGCI
==
0
))
...
...
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