2017-12-30 29 views
0

In Tests finde ich, dass die Implementierung des Suchdienstes manchmal Probleme mit Sperrkonflikten hat. Ich sehe Fehler wie die folgenden:Google Appengine LocalSearchService schlägt aufgrund von Sperrkonkurrenz im Test fehl

Dec 30, 2017 6:09:28 PM com.google.appengine.api.search.dev.LocalSearchService indexDocumentForApp 
SEVERE: Unable to access index 
com.google.appengine.repackaged.org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: [email protected]/[path]/WEB-INF/appengine-generated/indexes/dGVzdA/Ym9va3Rh..P/write.lock 
    at com.google.appengine.repackaged.org.apache.lucene.store.Lock.obtain(Lock.java:85) 
    at com.google.appengine.repackaged.org.apache.lucene.index.IndexWriter.init(IndexWriter.java:1562) 
    at com.google.appengine.repackaged.org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1090) 
    at com.google.appengine.api.search.dev.LocalSearchService.getIndexWriter(LocalSearchService.java:800) 
    at com.google.appengine.api.search.dev.LocalSearchService.indexDocumentForApp(LocalSearchService.java:290) 
    at com.google.appengine.api.search.dev.LocalSearchService.indexDocument(LocalSearchService.java:268) 
    at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.invokeApiMethodJava(ApiProxyLocalImpl.java:604) 
    at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.callInternal(ApiProxyLocalImpl.java:559) 
    at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:516) 
    at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:488) 
    at java.util.concurrent.Executors$PrivilegedCallable$1.run(Executors.java:533) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.util.concurrent.Executors$PrivilegedCallable.call(Executors.java:530) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Dies scheint nicht zu keinen grundlegenden Rennbedingungen im Test selbst, sondern verursacht flakiness mit Tests zusammenzuhängen. Hat jemand eine Arbeit für diesen Fehler?

Antwort

0

Es stellt sich heraus, dass dies auf die Verwendung des Search Service Indexer in einem Test ohne eine Testkonfiguration für den Suchdienst zurückzuführen ist. Das Hinzufügen der korrekten Konfiguration zu den problematischen Tests hat das Problem gelöst.

private final LocalServiceTestHelper helper = 
     new LocalServiceTestHelper(
       new LocalSearchServiceTestConfig()); 

@Before 
public void setUp() throws Exception { 
    helper.setUp(); 
} 

@After 
public void tearDown() { 
    helper.tearDown(); 
} 
Verwandte Themen