Skip to content

Commit ebdb50e

Browse files
authored
Merge pull request #4641 from kgrgreer/NUIDGeneratorInitSync
NUIDGenerator - refactor init to handle multithreading
2 parents b129309 + 89b5397 commit ebdb50e

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

src/foam/util/NUIDGenerator.js

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,25 @@ foam.CLASS({
8787
{
8888
name: 'initMaxSeqNo',
8989
javaCode: `
90-
if ( ! initMaxSeqNo_.getAndSet(true) ) {
91-
Logger logger = Loggers.logger(getX(), this);
92-
logger.info(getSalt(), "max", "find");
93-
getDao().select(new AbstractSink() {
94-
@Override
95-
public void put(Object obj, Detachable sub) {
96-
var id = (long) getPropertyInfo().get(obj);
97-
maybeUpdateSeqNo(id);
98-
}
99-
});
100-
Loggers.logger(getX(), this).info(getSalt(), "max", "found", seqNo_.get());
90+
if ( ! initMaxSeqNo_.get() ) {
91+
synchronized ( initMaxSeqNo_ ) {
92+
if ( ! initMaxSeqNo_.get() ) {
93+
Logger logger = Loggers.logger(getX(), this);
94+
logger.info(getSalt(), "max", "find");
95+
getDao().select(new AbstractSink() {
96+
@Override
97+
public void put(Object obj, Detachable sub) {
98+
var id = (long) getPropertyInfo().get(obj);
99+
maybeUpdateSeqNo(id);
100+
}
101+
public void eof() {
102+
initMaxSeqNo_.getAndSet(true);
103+
}
104+
});
105+
Loggers.logger(getX(), this).info(getSalt(), "max", "found", seqNo_.get());
106+
}
101107
}
108+
}
102109
`
103110
},
104111
{

0 commit comments

Comments
 (0)