Skip to content

Commit 80432a3

Browse files
committed
Remove close method in PageCacheRecycler/Recycler (#41917)
The changes in #39317 brought to light some concurrency issues in the close method of Recyclers as we do not wait for threads running in the threadpool to be finished prior to the closing of the PageCacheRecycler and the Recyclers that are used internally. #41695 was opened to address the concurrent close issues but upon review, the closing of these classes is not really needed as the instances should be become available for garbage collection once there is no longer a reference to the closed node. Closes #41683
1 parent 44c3418 commit 80432a3

File tree

11 files changed

+2
-65
lines changed

11 files changed

+2
-65
lines changed

server/src/main/java/org/elasticsearch/client/transport/TransportClient.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,6 @@ private static ClientTemplate buildTemplate(Settings providedSettings, Settings
184184
resourcesToClose.add(circuitBreakerService);
185185
PageCacheRecycler pageCacheRecycler = new PageCacheRecycler(settings);
186186
BigArrays bigArrays = new BigArrays(pageCacheRecycler, circuitBreakerService, CircuitBreaker.REQUEST);
187-
resourcesToClose.add(pageCacheRecycler);
188187
modules.add(settingsModule);
189188
NetworkModule networkModule = new NetworkModule(settings, true, pluginsService.filterPlugins(NetworkPlugin.class), threadPool,
190189
bigArrays, pageCacheRecycler, circuitBreakerService, namedWriteableRegistry, xContentRegistry, networkService, null);
@@ -376,7 +375,6 @@ public void close() {
376375
closeables.add(plugin);
377376
}
378377
closeables.add(() -> ThreadPool.terminate(injector.getInstance(ThreadPool.class), 10, TimeUnit.SECONDS));
379-
closeables.add(injector.getInstance(PageCacheRecycler.class));
380378
IOUtils.closeWhileHandlingException(closeables);
381379
}
382380

server/src/main/java/org/elasticsearch/common/recycler/AbstractRecycler.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,4 @@ protected AbstractRecycler(Recycler.C<T> c) {
2828
this.c = c;
2929
}
3030

31-
@Override
32-
public void close() {
33-
// no-op by default
34-
}
35-
3631
}

server/src/main/java/org/elasticsearch/common/recycler/ConcurrentDequeRecycler.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,6 @@ public ConcurrentDequeRecycler(C<T> c, int maxSize) {
3737
this.size = new AtomicInteger();
3838
}
3939

40-
@Override
41-
public void close() {
42-
assert deque.size() == size.get();
43-
super.close();
44-
size.set(0);
45-
}
46-
4740
@Override
4841
public V<T> obtain() {
4942
final V<T> v = super.obtain();

server/src/main/java/org/elasticsearch/common/recycler/DequeRecycler.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,6 @@ public DequeRecycler(C<T> c, Deque<T> queue, int maxSize) {
3636
this.maxSize = maxSize;
3737
}
3838

39-
@Override
40-
public void close() {
41-
// call destroy() for every cached object
42-
for (T t : deque) {
43-
c.destroy(t);
44-
}
45-
// finally get rid of all references
46-
deque.clear();
47-
}
48-
4939
@Override
5040
public V<T> obtain() {
5141
final T v = deque.pollFirst();

server/src/main/java/org/elasticsearch/common/recycler/FilterRecycler.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,4 @@ public Recycler.V<T> obtain() {
3434
return wrap(getDelegate().obtain());
3535
}
3636

37-
@Override
38-
public void close() {
39-
getDelegate().close();
40-
}
41-
4237
}

server/src/main/java/org/elasticsearch/common/recycler/NoneRecycler.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ public V<T> obtain() {
3131
return new NV<>(c.newInstance());
3232
}
3333

34-
@Override
35-
public void close() {
36-
// no-op
37-
}
38-
3934
public static class NV<T> implements Recycler.V<T> {
4035

4136
T value;

server/src/main/java/org/elasticsearch/common/recycler/Recycler.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* A recycled object, note, implementations should support calling obtain and then recycle
2626
* on different threads.
2727
*/
28-
public interface Recycler<T> extends Releasable {
28+
public interface Recycler<T> {
2929

3030
interface Factory<T> {
3131
Recycler<T> build();
@@ -53,8 +53,6 @@ interface V<T> extends Releasable {
5353

5454
}
5555

56-
void close();
57-
5856
V<T> obtain();
5957

6058
}

server/src/main/java/org/elasticsearch/common/recycler/Recyclers.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,6 @@ protected Recycler<T> getDelegate() {
145145
return recyclers[slot()];
146146
}
147147

148-
@Override
149-
public void close() {
150-
for (Recycler<T> recycler : recyclers) {
151-
recycler.close();
152-
}
153-
}
154-
155148
};
156149
}
157150

server/src/main/java/org/elasticsearch/common/util/PageCacheRecycler.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
package org.elasticsearch.common.util;
2121

2222
import org.apache.lucene.util.RamUsageEstimator;
23-
import org.elasticsearch.common.lease.Releasable;
24-
import org.elasticsearch.common.lease.Releasables;
2523
import org.elasticsearch.common.recycler.AbstractRecyclerC;
2624
import org.elasticsearch.common.recycler.Recycler;
2725
import org.elasticsearch.common.settings.Setting;
@@ -39,7 +37,7 @@
3937
import static org.elasticsearch.common.recycler.Recyclers.none;
4038

4139
/** A recycler of fixed-size pages. */
42-
public class PageCacheRecycler implements Releasable {
40+
public class PageCacheRecycler {
4341

4442
public static final Setting<Type> TYPE_SETTING =
4543
new Setting<>("cache.recycler.page.type", Type.CONCURRENT.name(), Type::parse, Property.NodeScope);
@@ -73,11 +71,6 @@ public class PageCacheRecycler implements Releasable {
7371
NON_RECYCLING_INSTANCE = new PageCacheRecycler(Settings.builder().put(LIMIT_HEAP_SETTING.getKey(), "0%").build());
7472
}
7573

76-
@Override
77-
public void close() {
78-
Releasables.close(true, bytePage, intPage, longPage, objectPage);
79-
}
80-
8174
public PageCacheRecycler(Settings settings) {
8275
final Type type = TYPE_SETTING.get(settings);
8376
final long limit = LIMIT_HEAP_SETTING.get(settings).getBytes();

server/src/main/java/org/elasticsearch/node/Node.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ protected Node(
376376

377377
PageCacheRecycler pageCacheRecycler = createPageCacheRecycler(settings);
378378
BigArrays bigArrays = createBigArrays(pageCacheRecycler, circuitBreakerService);
379-
resourcesToClose.add(pageCacheRecycler);
380379
modules.add(settingsModule);
381380
List<NamedWriteableRegistry.Entry> namedWriteables = Stream.of(
382381
NetworkModule.getNamedWriteables().stream(),
@@ -842,8 +841,6 @@ public synchronized void close() throws IOException {
842841
toClose.add(() -> stopWatch.stop().start("node_environment"));
843842

844843
toClose.add(injector.getInstance(NodeEnvironment.class));
845-
toClose.add(() -> stopWatch.stop().start("page_cache_recycler"));
846-
toClose.add(injector.getInstance(PageCacheRecycler.class));
847844
toClose.add(stopWatch::stop);
848845

849846
if (logger.isTraceEnabled()) {

0 commit comments

Comments
 (0)