@@ -316,23 +316,30 @@ public List<BlockInfo> findByIds(long[] blockIds, int[] inodeIds)
316
316
return blks ;
317
317
}
318
318
319
- public boolean existsOnAnyStorage (long blockId , List <Integer > sids ) throws
319
+ public boolean existsOnAnyStorage (int inodeId , long blockId , List <Integer > sids ) throws
320
320
StorageException {
321
321
HopsSession session = connector .obtainSession ();
322
- HopsQueryBuilder qb = session .getQueryBuilder ();
323
- HopsQueryDomainType <ReplicaClusterj .ReplicaDTO > dobj =
324
- qb .createQueryDefinition (ReplicaClusterj .ReplicaDTO .class );
325
-
326
- HopsPredicate pred1 = dobj .get ("blockId" ).equal (dobj .param ("blockId" ));
327
- HopsPredicate pred2 = dobj .get ("storageId" ).in (dobj .param ("sids" ));
328
- dobj .where (pred1 .and (pred2 ));
329
-
330
- HopsQuery <ReplicaClusterj .ReplicaDTO > query = session .createQuery (dobj );
331
-
332
- query .setParameter ("blockId" , blockId );
333
- query .setParameter ("sids" , sids );
322
+
323
+ List <ReplicaClusterj .ReplicaDTO > dtos = new ArrayList <>();
324
+ for (Integer sid : sids ){
325
+ Object [] pk = new Object []{inodeId , blockId , sid };
326
+ ReplicaClusterj .ReplicaDTO dto = session .newInstance (ReplicaClusterj .ReplicaDTO .class , pk );
327
+ dto .setHashBucket (NOT_FOUND_ROW );
328
+ dto = session .load (dto );
329
+ dtos .add (dto );
330
+
331
+ }
332
+ session .flush ();
333
+ boolean exist = false ;
334
+ for (ReplicaClusterj .ReplicaDTO dto : dtos ){
335
+ if (dto .getHashBucket ()!=NOT_FOUND_ROW ){
336
+ exist = true ;
337
+ break ;
338
+ }
339
+ }
340
+ session .release (dtos );
334
341
335
- return query . getResultList (). size () > 0 ;
342
+ return exist ;
336
343
}
337
344
338
345
private List <BlockInfo > readBlockInfoBatch (final HopsSession session ,
0 commit comments