Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊Elasticsearch的Releasables

聊聊Elasticsearch的Releasables

原创
作者头像
code4it
发布于 2019-06-14 15:11:06
发布于 2019-06-14 15:11:06
43000
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文主要研究一下Elasticsearch的Releasables

Releasable

elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/lease/Releasable.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface Releasable extends Closeable {
​
    @Override
    void close();}
  • Releasable继承了java.io.Closeable接口

Releasables

elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/lease/Releasables.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public enum Releasables {
    ;private static void close(Iterable<? extends Releasable> releasables, boolean ignoreException) {
        try {
            // this does the right thing with respect to add suppressed and not wrapping errors etc.
            IOUtils.close(releasables);
        } catch (IOException e) {
            if (ignoreException == false) {
                throw new UncheckedIOException(e);
            }
        }
    }/** Release the provided {@link Releasable}s. */
    public static void close(Iterable<? extends Releasable> releasables) {
        close(releasables, false);
    }/** Release the provided {@link Releasable}s. */
    public static void close(Releasable... releasables) {
        close(Arrays.asList(releasables));
    }/** Release the provided {@link Releasable}s, ignoring exceptions. */
    public static void closeWhileHandlingException(Iterable<Releasable> releasables) {
        close(releasables, true);
    }/** Release the provided {@link Releasable}s, ignoring exceptions. */
    public static void closeWhileHandlingException(Releasable... releasables) {
        closeWhileHandlingException(Arrays.asList(releasables));
    }/** Release the provided {@link Releasable}s, ignoring exceptions if <code>success</code> is {@code false}. */
    public static void close(boolean success, Iterable<Releasable> releasables) {
        if (success) {
            close(releasables);
        } else {
            closeWhileHandlingException(releasables);
        }
    }/** Release the provided {@link Releasable}s, ignoring exceptions if <code>success</code> is {@code false}. */
    public static void close(boolean success, Releasable... releasables) {
        close(success, Arrays.asList(releasables));
    }/** Wrap several releasables into a single one. This is typically useful for use with try-with-resources: for example let's assume
     *  that you store in a list several resources that you would like to see released after execution of the try block:
     *
     *  <pre>
     *  List&lt;Releasable&gt; resources = ...;
     *  try (Releasable releasable = Releasables.wrap(resources)) {
     *      // do something
     *  }
     *  // the resources will be released when reaching here
     *  </pre>
     */
    public static Releasable wrap(final Iterable<Releasable> releasables) {
        return () -> close(releasables);
    }/** @see #wrap(Iterable) */
    public static Releasable wrap(final Releasable... releasables) {
        return () -> close(releasables);
    }/**
     * Equivalent to {@link #wrap(Releasable...)} but can be called multiple times without double releasing.
     */
    public static Releasable releaseOnce(final Releasable... releasables) {
        final AtomicBoolean released = new AtomicBoolean(false);
        return () -> {
            if (released.compareAndSet(false, true)) {
                close(releasables);
            }
        };
    }
}
  • Releasables提供close、closeWhileHandlingException、wrap、releaseOnce静态方法用于更方便地使用Releasable

实例

elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/index/translog/Translog.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Translog extends AbstractIndexShardComponent implements IndexShardComponent, Closeable {//......public static void writeOperations(StreamOutput outStream, List<Operation> toWrite) throws IOException {
        final ReleasableBytesStreamOutput out = new ReleasableBytesStreamOutput(BigArrays.NON_RECYCLING_INSTANCE);
        try {
            outStream.writeInt(toWrite.size());
            final BufferedChecksumStreamOutput checksumStreamOutput = new BufferedChecksumStreamOutput(out);
            for (Operation op : toWrite) {
                out.reset();
                final long start = out.position();
                out.skip(Integer.BYTES);
                writeOperationNoSize(checksumStreamOutput, op);
                long end = out.position();
                int operationSize = (int) (out.position() - Integer.BYTES - start);
                out.seek(start);
                out.writeInt(operationSize);
                out.seek(end);
                ReleasablePagedBytesReference bytes = out.bytes();
                bytes.writeTo(outStream);
            }
        } finally {
            Releasables.close(out);
        }}//......
}
  • writeOperations在finally中使用Releasables.close关闭了ReleasableBytesStreamOutput

小结

Releasables提供close、closeWhileHandlingException、wrap、releaseOnce静态方法用于更方便地使用Releasable

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊Elasticsearch的ReleasableLock
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/ReleasableLock.java
code4it
2019/06/13
4240
聊聊Elasticsearch的ReleasableLock
聊聊Elasticsearch的DiscoveryPlugin
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/plugins/DiscoveryPlugin.java
code4it
2019/05/27
5550
聊聊Elasticsearch的DiscoveryPlugin
聊聊Elasticsearch的Iterables
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/iterable/Iterables.java
code4it
2019/06/06
5360
聊聊Elasticsearch的Iterables
聊聊Elasticsearch的JvmStats
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/jvm/JvmStats.java
code4it
2019/05/25
4890
聊聊Elasticsearch的JvmStats
聊聊Elasticsearch的TaskScheduler
elasticsearch-7.0.1/libs/nio/src/main/java/org/elasticsearch/nio/TaskScheduler.java
code4it
2019/05/30
3780
聊聊Elasticsearch的TaskScheduler
聊聊Elasticsearch RestClient的NodeSelector
本文主要研究一下Elasticsearch RestClient的NodeSelector
code4it
2019/05/15
1K0
聊聊Elasticsearch RestClient的NodeSelector
聊聊Elasticsearch的AtomicArray
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/AtomicArray.java
code4it
2019/06/04
4040
聊聊Elasticsearch的AtomicArray
聊聊Elasticsearch的EsThreadPoolExecutor
本文主要研究一下Elasticsearch的EsThreadPoolExecutor
code4it
2019/06/02
5260
聊聊Elasticsearch的EsThreadPoolExecutor
聊聊elasticsearch的ElectMasterService
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/discovery/zen/ElectMasterService.java
code4it
2019/05/12
8510
聊聊elasticsearch的ElectMasterService
聊聊Elasticsearch RestClient的DeadHostState
本文主要研究一下Elasticsearch RestClient的DeadHostState
code4it
2019/05/21
6940
聊聊elasticsearch的RoutingService
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/cluster/routing/RoutingService.java
code4it
2019/05/14
5460
聊聊elasticsearch的RoutingService
聊聊elasticsearch的MasterFaultDetection
本文主要研究一下elasticsearch的MasterFaultDetection
code4it
2019/05/11
7290
聊聊elasticsearch的MasterFaultDetection
聊聊Elasticsearch RestClient的DeadHostState
本文主要研究一下Elasticsearch RestClient的DeadHostState
code4it
2019/05/17
6310
聊聊Elasticsearch RestClient的DeadHostState
聊聊Elasticsearch的RunOnce
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/RunOnce.java
code4it
2019/06/10
3850
聊聊Elasticsearch的RunOnce
聊聊Elasticsearch的FsProbe
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/fs/FsProbe.java
code4it
2019/05/24
5970
聊聊Elasticsearch的FsProbe
聊聊Elasticsearch的EvictingQueue
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/collect/EvictingQueue.java
code4it
2019/06/05
5420
聊聊Elasticsearch的EvictingQueue
聊聊Elasticsearch的CircuitBreaker
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/breaker/CircuitBreaker.java
code4it
2019/05/20
1.5K0
聊聊Elasticsearch的CircuitBreaker
聊聊Elasticsearch的CircuitBreakerService
本文主要研究一下Elasticsearch的CircuitBreakerService
code4it
2019/05/19
7920
聊聊Elasticsearch的CircuitBreakerService
聊聊Elasticsearch的NodesSniffer
elasticsearch-7.0.1/client/sniffer/src/main/java/org/elasticsearch/client/sniff/NodesSniffer.java
code4it
2019/05/18
9820
聊聊Elasticsearch的NodesSniffer
聊聊Elasticsearch的LazyInitializable
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/LazyInitializable.java
code4it
2019/06/08
2950
聊聊Elasticsearch的LazyInitializable
相关推荐
聊聊Elasticsearch的ReleasableLock
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验