Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
5cccf15b
Commit
5cccf15b
authored
Nov 29, 2010
by
mattijs
Browse files
BUG: fileMonitor : parallel syncing
parent
62bd94ca
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/OSspecific/POSIX/fileMonitor.C
View file @
5cccf15b
...
...
@@ -319,7 +319,7 @@ void Foam::fileMonitor::checkFiles() const
if
(
ready
<
0
)
{
FatalErrorIn
(
"fileMonitor::
updateStat
es()"
)
FatalErrorIn
(
"fileMonitor::
checkFil
es()"
)
<<
"Problem in issuing select."
<<
abort
(
FatalError
);
}
...
...
@@ -335,7 +335,7 @@ void Foam::fileMonitor::checkFiles() const
if
(
nBytes
<
0
)
{
FatalErrorIn
(
"fileMonitor::
updateStates(const fileName&
)"
)
FatalErrorIn
(
"fileMonitor::
checkFiles(
)"
)
<<
"read of "
<<
watcher_
->
inotifyFd_
<<
" failed with "
<<
label
(
nBytes
)
<<
abort
(
FatalError
);
...
...
@@ -374,7 +374,7 @@ void Foam::fileMonitor::checkFiles() const
)
{
// Correct directory and name
s
tate_
[
i
]
=
MODIFIED
;
localS
tate_
[
i
]
=
MODIFIED
;
}
}
}
...
...
@@ -403,18 +403,17 @@ void Foam::fileMonitor::checkFiles() const
if
(
newTime
==
0
)
{
s
tate_
[
watchFd
]
=
DELETED
;
localS
tate_
[
watchFd
]
=
DELETED
;
}
else
{
if
(
newTime
>
(
oldTime
+
regIOobject
::
fileModificationSkew
))
{
watcher_
->
lastMod_
[
watchFd
]
=
newTime
;
state_
[
watchFd
]
=
MODIFIED
;
localState_
[
watchFd
]
=
MODIFIED
;
}
else
{
s
tate_
[
watchFd
]
=
UNMODIFIED
;
localS
tate_
[
watchFd
]
=
UNMODIFIED
;
}
}
}
...
...
@@ -422,12 +421,14 @@ void Foam::fileMonitor::checkFiles() const
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam
::
fileMonitor
::
fileMonitor
(
const
bool
useInotify
)
:
useInotify_
(
useInotify
),
localState_
(
20
),
state_
(
20
),
watchFile_
(
20
),
freeWatchFds_
(
2
),
...
...
@@ -476,6 +477,7 @@ Foam::label Foam::fileMonitor::addWatch(const fileName& fName)
}
else
{
localState_
(
watchFd
)
=
UNMODIFIED
;
state_
(
watchFd
)
=
UNMODIFIED
;
watchFile_
(
watchFd
)
=
fName
;
}
...
...
@@ -517,30 +519,26 @@ void Foam::fileMonitor::updateStates
{
if
(
Pstream
::
master
()
||
!
masterOnly
)
{
// Update the localState_
checkFiles
();
}
if
(
syncPar
)
{
// Pack
current
state (might be on master only)
// Pack
local
state (might be on master only)
PackedList
<
2
>
stats
(
state_
.
size
(),
MODIFIED
);
if
(
Pstream
::
master
()
||
!
masterOnly
)
{
forAll
(
state_
,
watchFd
)
{
stats
[
watchFd
]
=
static_cast
<
unsigned
int
>
(
state_
[
watchFd
]);
stats
[
watchFd
]
=
static_cast
<
unsigned
int
>
(
localState_
[
watchFd
]
);
}
}
// Save local state for warning message below
PackedList
<
2
>
thisProcStats
;
if
(
!
masterOnly
)
{
thisProcStats
=
stats
;
}
// Scatter or reduce to synchronise state
if
(
masterOnly
)
{
...
...
@@ -573,33 +571,34 @@ void Foam::fileMonitor::updateStates
}
// Update
local
state
// Update
synchronised
state
forAll
(
state_
,
watchFd
)
{
if
(
masterOnly
)
{
// No need to check for inconsistent state. Just assign.
unsigned
int
stat
=
stats
[
watchFd
];
state_
[
watchFd
]
=
fileState
(
stat
);
}
else
// Assign synchronised state
unsigned
int
stat
=
stats
[
watchFd
];
state_
[
watchFd
]
=
fileState
(
stat
);
if
(
!
masterOnly
)
{
//
Check
for inconsistent state
before assigning.
if
(
thisProcS
tat
s
[
watchFd
]
!=
UNMODIFIED
)
//
Give warning
for inconsistent state
if
(
s
tat
e_
[
watchFd
]
!=
localState_
[
watchFd
]
)
{
if
(
stats
[
watchFd
]
==
UNMODIFIED
)
if
(
debug
)
{
WarningIn
(
"fileMonitor
::updateStates(const bool) const"
)
<<
"Delaying reading "
<<
watchFile_
[
watchFd
]
Pout
<<
"fileMonitor
: Delaying reading "
<<
watchFile_
[
watchFd
]
<<
" due to inconsistent "
"file time-stamps between processors"
<<
endl
;
}
else
{
unsigned
int
stat
=
stats
[
watchFd
];
state_
[
watchFd
]
=
fileState
(
stat
);
}
WarningIn
(
"fileMonitor::updateStates"
"(const bool, const bool) const"
)
<<
"Delaying reading "
<<
watchFile_
[
watchFd
]
<<
" due to inconsistent "
"file time-stamps between processors"
<<
endl
;
}
}
}
...
...
@@ -610,6 +609,7 @@ void Foam::fileMonitor::updateStates
void
Foam
::
fileMonitor
::
setUnmodified
(
const
label
watchFd
)
{
state_
[
watchFd
]
=
UNMODIFIED
;
localState_
[
watchFd
]
=
UNMODIFIED
;
if
(
!
useInotify_
)
{
...
...
src/OSspecific/POSIX/fileMonitor.H
View file @
5cccf15b
...
...
@@ -71,7 +71,7 @@ public:
{
UNMODIFIED
=
0
,
MODIFIED
=
1
,
DELETED
=
2
,
DELETED
=
2
};
static
const
NamedEnum
<
fileState
,
3
>
fileStateNames_
;
...
...
@@ -82,7 +82,10 @@ private:
//- Whether to use inotify (requires -DFOAM_USE_INOTIFY, see above)
const
bool
useInotify_
;
//- State for all watchFds
//- State for all watchFds based on local files
mutable
DynamicList
<
fileState
>
localState_
;
//- State for all watchFds - synchronised
mutable
DynamicList
<
fileState
>
state_
;
//- Filename for all watchFds
...
...
@@ -97,7 +100,7 @@ private:
// Private Member Functions
//- Update
s
tate_ from any events.
//- Update
localS
tate_ from any events.
void
checkFiles
()
const
;
//- Disallow default bitwise copy construct
...
...
src/OpenFOAM/db/regIOobject/regIOobject.C
View file @
5cccf15b
...
...
@@ -60,7 +60,6 @@ Foam::regIOobject::fileCheckTypes Foam::regIOobject::fileModificationChecking
debug
::
optimisationSwitches
().
lookup
(
"fileModificationChecking"
//Foam::regIOobject::timeStamp
)
)
);
...
...
src/OpenFOAM/global/argList/argList.C
View file @
5cccf15b
...
...
@@ -31,6 +31,7 @@ License
#include "IOobject.H"
#include "JobInfo.H"
#include "labelList.H"
#include "regIOobject.H"
#include <cctype>
...
...
@@ -767,6 +768,16 @@ Foam::argList::argList
sigQuit_
.
set
(
bannerEnabled
);
sigSegv_
.
set
(
bannerEnabled
);
if
(
bannerEnabled
)
{
Info
<<
"Monitoring run-time modified files using "
<<
regIOobject
::
fileCheckTypesNames
[
regIOobject
::
fileModificationChecking
]
<<
endl
;
}
if
(
Pstream
::
master
()
&&
bannerEnabled
)
{
Info
<<
endl
;
...
...
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