日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lucene源码分析(8)MergeScheduler

發布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lucene源码分析(8)MergeScheduler 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.使用IndexWriter.java

mergeScheduler.merge(this, MergeTrigger.EXPLICIT, newMergesFound);

2.定義MergeScheduler

/** <p>Expert: {@link IndexWriter} uses an instance* implementing this interface to execute the merges* selected by a {@link MergePolicy}. The default* MergeScheduler is {@link ConcurrentMergeScheduler}.</p>* @lucene.experimental */

3.MergeTrigger 出發merge的事件

/*** MergeTrigger is passed to* {@link MergePolicy#findMerges(MergeTrigger, SegmentInfos, MergePolicy.MergeContext)} to indicate the* event that triggered the merge.*/ public enum MergeTrigger {/*** Merge was triggered by a segment flush.*/SEGMENT_FLUSH,/*** Merge was triggered by a full flush. Full flushes* can be caused by a commit, NRT reader reopen or a close call on the index writer.*/FULL_FLUSH,/*** Merge has been triggered explicitly by the user.*/EXPLICIT,/*** Merge was triggered by a successfully finished merge.*/MERGE_FINISHED,/*** Merge was triggered by a closing IndexWriter.*/CLOSING }

4.ConcurrentMergeScheduler默認實現

/** A {@link MergeScheduler} that runs each merge using a* separate thread.** <p>Specify the max number of threads that may run at* once, and the maximum number of simultaneous merges* with {@link #setMaxMergesAndThreads}.</p>** <p>If the number of merges exceeds the max number of threads * then the largest merges are paused until one of the smaller* merges completes.</p>** <p>If more than {@link #getMaxMergeCount} merges are* requested then this class will forcefully throttle the* incoming threads by pausing until one more more merges* complete.</p>** <p>This class attempts to detect whether the index is* on rotational storage (traditional hard drive) or not* (e.g. solid-state disk) and changes the default max merge* and thread count accordingly. This detection is currently* Linux-only, and relies on the OS to put the right value* into /sys/block/&lt;dev&gt;/block/rotational. For all* other operating systems it currently assumes a rotational* disk for backwards compatibility. To enable default* settings for spinning or solid state disks for such* operating systems, use {@link #setDefaultMaxMergesAndThreads(boolean)}.*/

5.MergeThread執行merge任務

@Overridepublic void run() {try {if (verbose()) {message(" merge thread: start");} doMerge(writer, merge);if (verbose()) {message(" merge thread: done");}// Let CMS run new merges if necessary:try {merge(writer, MergeTrigger.MERGE_FINISHED, true);} catch (AlreadyClosedException ace) {// OK} catch (IOException ioe) {throw new RuntimeException(ioe);}} catch (Throwable exc) {if (exc instanceof MergePolicy.MergeAbortedException) {// OK to ignore} else if (suppressExceptions == false) {// suppressExceptions is normally only set during// testing. handleMergeException(writer.getDirectory(), exc);}} finally {synchronized(ConcurrentMergeScheduler.this) {removeMergeThread();updateMergeThreads();// In case we had stalled indexing, we can now wake up// and possibly unstall:ConcurrentMergeScheduler.this.notifyAll();}}}}

merge過程

/*** Merges the indicated segments, replacing them in the stack with a* single segment.* * @lucene.experimental*/public void merge(MergePolicy.OneMerge merge) throws IOException {boolean success = false;final long t0 = System.currentTimeMillis();final MergePolicy mergePolicy = config.getMergePolicy();try {try {try {mergeInit(merge);if (infoStream.isEnabled("IW")) {infoStream.message("IW", "now merge\n merge=" + segString(merge.segments) + "\n index=" + segString());}mergeMiddle(merge, mergePolicy);mergeSuccess(merge);success = true;} catch (Throwable t) {handleMergeException(t, merge);}} finally {synchronized(this) {mergeFinish(merge);if (success == false) {if (infoStream.isEnabled("IW")) {infoStream.message("IW", "hit exception during merge");}} else if (!merge.isAborted() && (merge.maxNumSegments != UNBOUNDED_MAX_MERGE_SEGMENTS || (!closed && !closing))) {// This merge (and, generally, any change to the// segments) may now enable new merges, so we call// merge policy & update pending merges. updatePendingMerges(mergePolicy, MergeTrigger.MERGE_FINISHED, merge.maxNumSegments);}}}} catch (Throwable t) {// Important that tragicEvent is called after mergeFinish, else we hang// waiting for our merge thread to be removed from runningMerges:tragicEvent(t, "merge");throw t;}if (merge.info != null && merge.isAborted() == false) {if (infoStream.isEnabled("IW")) {infoStream.message("IW", "merge time " + (System.currentTimeMillis()-t0) + " msec for " + merge.info.info.maxDoc() + " docs");}}}

6.merge結束

/** Does fininishing for a merge, which is fast but holds* the synchronized lock on IndexWriter instance. */final synchronized void mergeFinish(MergePolicy.OneMerge merge) {// forceMerge, addIndexes or waitForMerges may be waiting// on merges to finish. notifyAll();// It's possible we are called twice, eg if there was an// exception inside mergeInitif (merge.registerDone) {final List<SegmentCommitInfo> sourceSegments = merge.segments;for (SegmentCommitInfo info : sourceSegments) {mergingSegments.remove(info);}merge.registerDone = false;}runningMerges.remove(merge);}

?

轉載于:https://www.cnblogs.com/davidwang456/p/10059134.html

總結

以上是生活随笔為你收集整理的lucene源码分析(8)MergeScheduler的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 奶妈的诱惑 | 欧美在线观看a | 欧美国产日本在线 | 78m78成人免费网站 | 成人免费视频播放 | 熟妇人妻系列aⅴ无码专区友真希 | 在线看片成人 | 114国产精品久久免费观看 | 久久国产加勒比精品无码 | 色天天色| www.爱爱| 成年女人18级毛片毛片免费 | 波多野结衣福利 | 亚洲av鲁丝一区二区三区 | 欧美一道本 | 石原莉奈在线播放 | 免费视频二区 | 老熟妇仑乱一区二区av | 折磨小男生性器羞耻的故事 | 91jk制服白丝超短裙大长腿 | 日韩美女少妇 | 欧美怡红院视频一区二区三区 | 美女视频国产 | 色呦呦 | 一区不卡在线 | 国产午夜三级一区二区三 | 亚洲欧美日韩图片 | 淫视频在线观看 | 精精国产 | 蜜桃av网站 | 国产精品一区免费观看 | 亚洲精品成人无码熟妇在线 | 中文字幕亚洲欧美日韩 | 亚洲免费毛片 | 日韩欧美在线观看一区 | 献给魔王伊伏洛基亚吧动漫在线观看 | 538国产精品视频一区二区 | jlzzjlzz欧美大全| 欧美一级黄色片网站 | 关之琳三级全黄做爰在线观看 | 女人18毛片水真多18精品 | 精品一区二区久久久久蜜桃 | 暴力调教一区二区三区 | 在线观看网站 | 一区二区免费看 | 四虎永久在线视频 | 亚洲黄色片网站 | 欧美高清二区 | 国产又粗又猛又爽69xx | 中文字幕在线永久 | 91久久一区二区三区 | 红桃av在线 | 亚洲免费观看高清完整 | 日韩午夜影院 | 中文字幕一区二区在线视频 | 四色成人av永久网址 | 日本久色| 吻胸摸激情床激烈视频大胸 | 制服丝袜亚洲 | 午夜精品视频在线观看 | 男人爆操女人 | 久草综合网 | 大地资源在线观看免费高清版粤语 | 天天综合网久久综合网 | 亚洲涩涩涩| 美女福利视频在线 | 日本激情一区 | 在线色网址 | 国产福利小视频在线观看 | 艹久久 | 无码人妻aⅴ一区二区三区有奶水 | 四虎精品欧美一区二区免费 | 大陆av片| 狠狠干2021| 99在线无码精品入口 | 国产97色在线 | 国产 | 成人做爰www看视频软件 | 日韩欧美一级在线 | 国产一区在线视频 | 欧美综合久久久 | 狠狠老司机 | 欧美日韩精品在线观看 | 中国黄色一级大片 | 成人中文字幕在线观看 | 日韩精品在线看 | 伊人影院av | 欧美一区二区三区在线看 | 99热热99 | 国产精品调教 | 免费福利在线 | 国产午夜精品一区二区理论影院 | 伊人久久精品视频 | 少妇太紧太爽又黄又硬又爽 | 爱久久视频 | 人妻系列一区 | 免费看欧美黄色片 | 日韩不卡视频在线 | 国产精品三区在线观看 | 国产精品麻豆欧美日韩ww |