@@ -76,7 +76,8 @@ public Scheduler(
7676 this .releaseFlushStrategy = releaseFlushStrategy ;
7777 }
7878
79- private void executeFlush (CachedMTreeStore store , int regionId , AtomicInteger remainToFlush ) {
79+ private void executeFlush (
80+ CachedMTreeStore store , int regionId , AtomicInteger remainToFlush , boolean propagateFailure ) {
8081 IMemoryManager memoryManager = store .getMemoryManager ();
8182 ISchemaFile file = store .getSchemaFile ();
8283 LockManager lockManager = store .getLockManager ();
@@ -97,6 +98,9 @@ private void executeFlush(CachedMTreeStore store, int regionId, AtomicInteger re
9798 regionId ,
9899 e .getMessage (),
99100 e );
101+ if (propagateFailure ) {
102+ throw new RuntimeException (e );
103+ }
100104 } finally {
101105 long time = System .currentTimeMillis () - startTime ;
102106 if (time > 10_000 ) {
@@ -145,22 +149,26 @@ public synchronized CompletableFuture<Void> scheduleFlushAll() {
145149 CompletableFuture .runAsync (
146150 () -> {
147151 int regionId = entry .getKey ();
148- CachedMTreeStore store = entry .getValue ();
149- if (store == null ) {
150- // store has been closed
151- return ;
152- }
153- LockManager lockManager = store .getLockManager ();
154- lockManager .globalReadLock ();
155- if (!regionToStore .containsKey (regionId )) {
156- // double check store have not been closed
157- return ;
158- }
159152 try {
160- executeFlush (store , regionId , null );
161- executeRelease (store , false );
153+ CachedMTreeStore store = entry .getValue ();
154+ if (store == null ) {
155+ // store has been closed
156+ return ;
157+ }
158+ LockManager lockManager = store .getLockManager ();
159+ lockManager .globalReadLock ();
160+ try {
161+ if (!regionToStore .containsKey (regionId )) {
162+ // double check store have not been closed
163+ return ;
164+ }
165+ executeFlush (store , regionId , null , true );
166+ executeRelease (store , false );
167+ } finally {
168+ lockManager .globalReadUnlock ();
169+ }
162170 } finally {
163- lockManager . globalReadUnlock ( );
171+ flushingRegionSet . remove ( regionId );
164172 }
165173 },
166174 workerPool ))
@@ -221,22 +229,25 @@ public synchronized void scheduleFlush(List<Integer> regionIds) {
221229 flushingRegionSet .add (regionId );
222230 workerPool .submit (
223231 () -> {
224- CachedMTreeStore store = regionToStore .get (regionId );
225- if (store == null ) {
226- // store has been closed
227- return ;
228- }
229- LockManager lockManager = store .getLockManager ();
230- lockManager .globalReadLock ();
231- if (!regionToStore .containsKey (regionId )) {
232- // double check store have not been closed
233- return ;
234- }
235232 try {
236-
237- executeFlush (store , regionId , remainToFlush );
233+ CachedMTreeStore store = regionToStore .get (regionId );
234+ if (store == null ) {
235+ // store has been closed
236+ return ;
237+ }
238+ LockManager lockManager = store .getLockManager ();
239+ lockManager .globalReadLock ();
240+ try {
241+ if (!regionToStore .containsKey (regionId )) {
242+ // double check store have not been closed
243+ return ;
244+ }
245+ executeFlush (store , regionId , remainToFlush , false );
246+ } finally {
247+ lockManager .globalReadUnlock ();
248+ }
238249 } finally {
239- lockManager . globalReadUnlock ( );
250+ flushingRegionSet . remove ( regionId );
240251 }
241252 });
242253 if (remainToFlush .get () <= 0 ) {
0 commit comments