Skip to content

Commit 0f77fa7

Browse files
committed
LIB-16359 - Resolve issues with refreshing solr after move operations (#1379)
* Add missing indexing filter for move operations to fix bug where status values weren't getting cleared * Invalidate path cache when an object is modified, to prevent stale value from preventing the path from updating in solr from a move operation if the same object had recently been indexed * Reorder imports
1 parent 890949d commit 0f77fa7

File tree

7 files changed

+47
-23
lines changed

7 files changed

+47
-23
lines changed

Diff for: model-api/src/main/java/edu/unc/lib/boxc/model/api/services/ContentPathFactory.java

+5
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,9 @@ public interface ContentPathFactory {
3434
*/
3535
List<PID> getAncestorPids(PID pid);
3636

37+
/**
38+
* Invalidates cached data for the provided pid
39+
* @param pid
40+
*/
41+
void invalidate(PID pid);
3742
}

Diff for: model-fcrepo/src/main/java/edu/unc/lib/boxc/model/fcrepo/services/ContentPathFactoryImpl.java

+5
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ public List<PID> getAncestorPids(PID pid) {
9595
}
9696
}
9797

98+
@Override
99+
public void invalidate(PID pid) {
100+
childToParentCache.invalidate(pid);
101+
}
102+
98103
private List<PID> buildPath(PID pid) {
99104
PID currentPid = pid;
100105
List<PID> result = new ArrayList<>();

Diff for: services-camel-app/src/main/java/edu/unc/lib/boxc/services/camel/util/CacheInvalidatingProcessor.java

+14-8
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@
1515
*/
1616
package edu.unc.lib.boxc.services.camel.util;
1717

18-
import static org.slf4j.LoggerFactory.getLogger;
19-
20-
import org.apache.camel.Exchange;
21-
import org.apache.camel.Message;
22-
import org.apache.camel.Processor;
23-
import org.fcrepo.camel.FcrepoHeaders;
24-
import org.slf4j.Logger;
25-
2618
import edu.unc.lib.boxc.auth.fcrepo.services.ObjectAclFactory;
2719
import edu.unc.lib.boxc.fcrepo.FcrepoJmsConstants;
2820
import edu.unc.lib.boxc.model.api.ids.PID;
2921
import edu.unc.lib.boxc.model.api.ids.PIDConstants;
3022
import edu.unc.lib.boxc.model.api.objects.RepositoryObjectLoader;
23+
import edu.unc.lib.boxc.model.api.services.ContentPathFactory;
3124
import edu.unc.lib.boxc.model.fcrepo.ids.PIDs;
25+
import org.apache.camel.Exchange;
26+
import org.apache.camel.Message;
27+
import org.apache.camel.Processor;
28+
import org.fcrepo.camel.FcrepoHeaders;
29+
import org.slf4j.Logger;
30+
31+
import static org.slf4j.LoggerFactory.getLogger;
3232

3333
/**
3434
* Processor which invalidates cache entries for updated objects
@@ -39,6 +39,7 @@ public class CacheInvalidatingProcessor implements Processor {
3939
private static final Logger log = getLogger(CacheInvalidatingProcessor.class);
4040
private RepositoryObjectLoader repoObjLoader;
4141
private ObjectAclFactory objectAclFactory;
42+
private ContentPathFactory contentPathFactory;
4243

4344
@Override
4445
public void process(Exchange exchange) throws Exception {
@@ -64,6 +65,7 @@ public void process(Exchange exchange) throws Exception {
6465
log.debug("Invalidating caches for {}", pid);
6566
repoObjLoader.invalidate(pid);
6667
objectAclFactory.invalidate(pid);
68+
contentPathFactory.invalidate(pid);
6769
}
6870

6971
public void setRepositoryObjectLoader(RepositoryObjectLoader repoObjLoader) {
@@ -73,4 +75,8 @@ public void setRepositoryObjectLoader(RepositoryObjectLoader repoObjLoader) {
7375
public void setObjectAclFactory(ObjectAclFactory objectAclFactory) {
7476
this.objectAclFactory = objectAclFactory;
7577
}
78+
79+
public void setContentPathFactory(ContentPathFactory contentPathFactory) {
80+
this.contentPathFactory = contentPathFactory;
81+
}
7682
}

Diff for: services-camel-app/src/main/webapp/WEB-INF/service-context.xml

+1
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@
206206
<bean id="cacheInvalidatingProcessor" class="edu.unc.lib.boxc.services.camel.util.CacheInvalidatingProcessor">
207207
<property name="repositoryObjectLoader" ref="repositoryObjectLoader" />
208208
<property name="objectAclFactory" ref="objectAclFactory" />
209+
<property name="contentPathFactory" ref="contentPathFactory" />
209210
</bean>
210211

211212
<bean id="addSmallThumbnailProcessor" class="edu.unc.lib.boxc.services.camel.images.AddDerivativeProcessor">

Diff for: services-camel-app/src/main/webapp/WEB-INF/solr-indexing-context.xml

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
<ref bean="setRecordDatesFilter" />
5757
<ref bean="setPathFilter" />
5858
<ref bean="setAccessControlFilter" />
59+
<ref bean="setAccessStatusFilter" />
5960
<ref bean="setCollectionSupplementalInformationFilter" />
6061
</list>
6162
</property>

Diff for: services-camel-app/src/test/java/edu/unc/lib/boxc/services/camel/util/CacheInvalidatingProcessorTest.java

+20-15
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,27 @@
1515
*/
1616
package edu.unc.lib.boxc.services.camel.util;
1717

18-
import static org.mockito.Matchers.any;
19-
import static org.mockito.Matchers.eq;
20-
import static org.mockito.Mockito.mock;
21-
import static org.mockito.Mockito.never;
22-
import static org.mockito.Mockito.verify;
23-
import static org.mockito.Mockito.when;
24-
import static org.mockito.MockitoAnnotations.initMocks;
25-
26-
import org.apache.camel.Exchange;
27-
import org.apache.camel.Message;
28-
import org.junit.Before;
29-
import org.junit.Test;
30-
import org.mockito.Mock;
31-
3218
import edu.unc.lib.boxc.auth.fcrepo.services.ObjectAclFactory;
3319
import edu.unc.lib.boxc.fcrepo.FcrepoJmsConstants;
3420
import edu.unc.lib.boxc.model.api.ids.PID;
3521
import edu.unc.lib.boxc.model.api.ids.PIDConstants;
22+
import edu.unc.lib.boxc.model.api.services.ContentPathFactory;
3623
import edu.unc.lib.boxc.model.fcrepo.ids.PIDs;
3724
import edu.unc.lib.boxc.model.fcrepo.services.RepositoryObjectLoaderImpl;
3825
import edu.unc.lib.boxc.model.fcrepo.test.TestHelper;
39-
import edu.unc.lib.boxc.services.camel.util.CacheInvalidatingProcessor;
26+
import org.apache.camel.Exchange;
27+
import org.apache.camel.Message;
28+
import org.junit.Before;
29+
import org.junit.Test;
30+
import org.mockito.Mock;
31+
32+
import static org.mockito.Matchers.any;
33+
import static org.mockito.Matchers.eq;
34+
import static org.mockito.Mockito.mock;
35+
import static org.mockito.Mockito.never;
36+
import static org.mockito.Mockito.verify;
37+
import static org.mockito.Mockito.when;
38+
import static org.mockito.MockitoAnnotations.initMocks;
4039

4140
/**
4241
* @author bbpennel
@@ -50,6 +49,8 @@ public class CacheInvalidatingProcessorTest {
5049
private RepositoryObjectLoaderImpl repoObjLoader;
5150
@Mock
5251
private ObjectAclFactory objectAclFactory;
52+
@Mock
53+
private ContentPathFactory contentPathFactory;
5354

5455
private CacheInvalidatingProcessor processor;
5556

@@ -60,6 +61,7 @@ public void init() throws Exception {
6061
processor = new CacheInvalidatingProcessor();
6162
processor.setRepositoryObjectLoader(repoObjLoader);
6263
processor.setObjectAclFactory(objectAclFactory);
64+
processor.setContentPathFactory(contentPathFactory);
6365
}
6466

6567
@Test
@@ -72,6 +74,7 @@ public void invalidatesContentPidTest() throws Exception {
7274
PID pid = PIDs.get(FEDORA_BASE + objPath);
7375
verify(repoObjLoader).invalidate(pid);
7476
verify(objectAclFactory).invalidate(pid);
77+
verify(contentPathFactory).invalidate(pid);
7578
}
7679

7780
@Test
@@ -83,6 +86,7 @@ public void ignoresDepositPidTest() throws Exception {
8386

8487
verify(repoObjLoader, never()).invalidate(any(PID.class));
8588
verify(objectAclFactory, never()).invalidate(any(PID.class));
89+
verify(contentPathFactory, never()).invalidate(any(PID.class));
8690
}
8791

8892
@Test
@@ -94,6 +98,7 @@ public void ignoresInvalidPidTest() throws Exception {
9498

9599
verify(repoObjLoader, never()).invalidate(any(PID.class));
96100
verify(objectAclFactory, never()).invalidate(any(PID.class));
101+
verify(contentPathFactory, never()).invalidate(any(PID.class));
97102
}
98103

99104
private Exchange mockExchange(String rescPath) {

Diff for: services-camel-app/src/test/resources/solr-update-processor-it-context.xml

+1
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@
174174
<bean id="cacheInvalidatingProcessor" class="edu.unc.lib.boxc.services.camel.util.CacheInvalidatingProcessor">
175175
<property name="repositoryObjectLoader" ref="repositoryObjectLoader"/>
176176
<property name="objectAclFactory" ref="objectAclFactory"/>
177+
<property name="contentPathFactory" ref="contentPathFactory"/>
177178
</bean>
178179

179180
<bean id="solrUpdatePreprocessor" class="edu.unc.lib.boxc.services.camel.solrUpdate.SolrUpdatePreprocessor">

0 commit comments

Comments
 (0)