Do not lock on settings keyset if keys initialized (#52435)
Every time a setting#exist call is made we lock on the keyset to ensure that it has been initialized. This a heavyweight operation that only should be done once. This commit moves to a volatile read instead to prevent unnecessary locking.
This commit is contained in:
parent
b5e191fa57
commit
7fcd997b39
|
@ -716,7 +716,9 @@ public final class Settings implements ToXContentFragment {
|
|||
|
||||
/** Returns the fully qualified setting names contained in this settings object. */
|
||||
public Set<String> keySet() {
|
||||
if (keys.get() == null) {
|
||||
synchronized (keys) {
|
||||
// Check that the keys are still null now that we have acquired the lock
|
||||
if (keys.get() == null) {
|
||||
if (secureSettings == null) {
|
||||
keys.set(settings.keySet());
|
||||
|
@ -727,6 +729,7 @@ public final class Settings implements ToXContentFragment {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return keys.get();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue