@Override public IndexRepository computeIndexRepository(final Integer bucketId, LuceneSerializer serializer, InternalLuceneIndex index, PartitionedRegion userRegion, IndexRepository oldRepository, PartitionedRepositoryManager partitionedRepositoryManager) throws IOException { final IndexRepository indexRepo = super.computeIndexRepository(bucketId, serializer, index, userRegion, oldRepository, partitionedRepositoryManager); if (indexRepo == null) { return null; } if (mockingDetails(indexRepo).isSpy()) { return indexRepo; } final IndexRepository spy = Mockito.spy(indexRepo); Answer invokeBeforeWrite = invocation -> { beforeWrite.accept(invocation.getArgument(0)); return invocation.callRealMethod(); }; doAnswer(invokeBeforeWrite).when(spy).update(any(), any()); doAnswer(invokeBeforeWrite).when(spy).create(any(), any()); doAnswer(invokeBeforeWrite).when(spy).delete(any()); return spy; }
private boolean reindexUserDataRegion(Integer bucketId, PartitionedRegion userRegion, PartitionedRegion fileRegion, BucketRegion dataBucket, IndexRepository repo) throws IOException { Set<IndexRepository> affectedRepos = new HashSet<IndexRepository>(); for (Object key : dataBucket.keySet()) { Object value = getValue(userRegion.getEntry(key)); if (value != null) { repo.update(key, value); } else { repo.delete(key); } affectedRepos.add(repo); } for (IndexRepository affectedRepo : affectedRepos) { affectedRepo.commit(); } // fileRegion ops (get/put) need bucketId as a callbackArg for PartitionResolver fileRegion.put(APACHE_GEODE_INDEX_COMPLETE, APACHE_GEODE_INDEX_COMPLETE, bucketId); return true; }
repository.update(key, value); } else { repository.delete(key);