2323import org .folio .search .model .types .ReindexEntityType ;
2424import org .folio .search .service .InstanceChildrenResourceService ;
2525import org .folio .search .service .ResourceService ;
26+ import org .folio .search .service .reindex .ReindexStatusService ;
2627import org .folio .search .service .reindex .jdbc .ItemRepository ;
2728import org .folio .search .service .reindex .jdbc .MergeInstanceRepository ;
2829import org .folio .search .service .reindex .jdbc .SubResourceResult ;
@@ -45,6 +46,7 @@ class ScheduledInstanceSubResourcesServiceTest {
4546 private @ Mock ResourceService resourceService ;
4647 private @ Mock TenantRepository tenantRepository ;
4748 private @ Mock SubResourcesLockRepository subResourcesLockRepository ;
49+ private @ Mock ReindexStatusService reindexStatusService ;
4850 private @ Mock SystemUserScopedExecutionService executionService ;
4951 private @ Mock InstanceChildrenResourceService instanceChildrenResourceService ;
5052 private @ Mock SubjectRepository subjectRepository ;
@@ -65,6 +67,7 @@ void setUp() {
6567 tenantRepository ,
6668 List .of (subjectRepository ),
6769 subResourcesLockRepository ,
70+ reindexStatusService ,
6871 executionService ,
6972 instanceRepository ,
7073 itemRepository ,
@@ -179,13 +182,15 @@ void persistChildren_ShouldReleaseStaleLockWhenLockAcquisitionFails() {
179182 .when (executionService ).executeSystemUserScoped (anyString (), any ());
180183 when (tenantRepository .fetchDataTenantIds ()).thenReturn (List .of (TENANT_ID ));
181184 when (subResourcesLockRepository .lockSubResource (any (), eq (TENANT_ID ))).thenReturn (Optional .empty ());
185+ when (reindexStatusService .isReindexInProgress ()).thenReturn (false );
182186 when (subResourcesLockRepository .checkAndReleaseStaleLock (any (), eq (TENANT_ID ), anyLong ())).thenReturn (true );
183187
184188 // Act
185189 service .persistChildren ();
186190
187191 // Assert
188192 verify (subResourcesLockRepository , times (3 )).lockSubResource (any (), eq (TENANT_ID ));
193+ verify (reindexStatusService , times (3 )).isReindexInProgress ();
189194 verify (subResourcesLockRepository , times (3 )).checkAndReleaseStaleLock (any (), eq (TENANT_ID ), anyLong ());
190195 verify (subResourcesLockRepository , never ()).unlockSubResource (any (), any (), any ());
191196 verify (subjectRepository , never ()).fetchByTimestamp (anyString (), any (), anyInt ());
@@ -199,19 +204,42 @@ void persistChildren_ShouldNotProcessWhenLockFailsAndNoStaleLock() {
199204 .when (executionService ).executeSystemUserScoped (anyString (), any ());
200205 when (tenantRepository .fetchDataTenantIds ()).thenReturn (List .of (TENANT_ID ));
201206 when (subResourcesLockRepository .lockSubResource (any (), eq (TENANT_ID ))).thenReturn (Optional .empty ());
207+ when (reindexStatusService .isReindexInProgress ()).thenReturn (false );
202208 when (subResourcesLockRepository .checkAndReleaseStaleLock (any (), eq (TENANT_ID ), anyLong ())).thenReturn (false );
203209
204210 // Act
205211 service .persistChildren ();
206212
207213 // Assert
208214 verify (subResourcesLockRepository , times (3 )).lockSubResource (any (), eq (TENANT_ID ));
215+ verify (reindexStatusService , times (3 )).isReindexInProgress ();
209216 verify (subResourcesLockRepository , times (3 )).checkAndReleaseStaleLock (any (), eq (TENANT_ID ), anyLong ());
210217 verify (subResourcesLockRepository , never ()).unlockSubResource (any (), any (), any ());
211218 verify (subjectRepository , never ()).fetchByTimestamp (anyString (), any (), anyInt ());
212219 verifyNoInteractions (instanceRepository , itemRepository , resourceService );
213220 }
214221
222+ @ Test
223+ void persistChildren_ShouldSkipStaleLockCheckWhenReindexInProgress () {
224+ // Arrange
225+ doAnswer (invocation -> invocation .<Callable <?>>getArgument (1 ).call ())
226+ .when (executionService ).executeSystemUserScoped (anyString (), any ());
227+ when (tenantRepository .fetchDataTenantIds ()).thenReturn (List .of (TENANT_ID ));
228+ when (subResourcesLockRepository .lockSubResource (any (), eq (TENANT_ID ))).thenReturn (Optional .empty ());
229+ when (reindexStatusService .isReindexInProgress ()).thenReturn (true );
230+
231+ // Act
232+ service .persistChildren ();
233+
234+ // Assert
235+ verify (subResourcesLockRepository , times (3 )).lockSubResource (any (), eq (TENANT_ID ));
236+ verify (reindexStatusService , times (3 )).isReindexInProgress ();
237+ verify (subResourcesLockRepository , never ()).checkAndReleaseStaleLock (any (), any (), anyLong ());
238+ verify (subResourcesLockRepository , never ()).unlockSubResource (any (), any (), any ());
239+ verify (subjectRepository , never ()).fetchByTimestamp (anyString (), any (), anyInt ());
240+ verifyNoInteractions (instanceRepository , itemRepository , resourceService );
241+ }
242+
215243 private void mockSubResourceResult (String tenantId , Timestamp timestamp ) {
216244 when (subjectRepository .fetchByTimestamp (tenantId , timestamp , 3 ))
217245 .thenReturn (new SubResourceResult (List .of (Map .of ("id" , "1" , "tenantId" , tenantId )), null ));
0 commit comments