Fichiers verrouillés après indexation
-
21-12-2019 - |
Question
J'ai le flux de travail suivant dans mon (Web) Application:
- Téléchargez un fichier PDF à partir d'une archive
- indexez le fichier
- Supprimer le fichier
Mon problème est qu'après indexation du fichier, il reste verrouillé et la partie de suppression jette une exception.
Voici mon code-code pour indexer le fichier:
try
{
ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract");
req.addFile(file, type);
req.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
NamedList<Object> result = server.request(req);
Assert.assertEquals(0, ((NamedList<?>) result.get("responseHeader")).get("status"));
}
Est-ce que je manque quelque chose?
EDIT:
J'ai essayé de cette façon aussi, mais avec le même résultat ...
ContentStream contentStream = null;
try
{
contentStream = new ContentStreamBase.FileStream(document);
ContentStreamUpdateRequest req = new ContentStreamUpdateRequest(UPDATE_EXTRACT_REQUEST);
// req.addFile(document, context.getProperty(FTSConstants.CONTENT_TYPE_APPLICATION_PDF));
req.addContentStream(contentStream);
req.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
NamedList<Object> result = server.request(req);
if (!((NamedList<?>) result.get("responseHeader")).get("status").equals(0))
{
throw new IDSystemException(LOG, "Document could not be indexed. Status returned: " +
((NamedList<?>) result.get("responseHeader")).get("status"));
}
}
catch (FileNotFoundException fnfe)
{
throw new IDSystemException(LOG, fnfe.getMessage(), fnfe);
}
catch (IOException ioe)
{
throw new IDSystemException(LOG, ioe.getMessage(), ioe);
}
catch (SolrServerException sse)
{
throw new IDSystemException(LOG, sse.getMessage(), sse);
}
finally
{
try
{
if(contentStream != null && contentStream.getStream() != null)
{
contentStream.getStream().close();
}
}
catch (IOException ioe)
{
throw new IDSystemException(LOG, ioe.getMessage(), ioe);
}
}
La solution
Cela semble être un bug,
Un patch est proposé ici https://issues.apache.org/jira/browse/solr-1744
Aussi à la caisse http://lucène.472066.n3.nnstabable.com / ContenutreamupDaeQuest-Addfile-échoue-to-Close-Stream-TD485429.html
Vous pouvez vérifier si le flux n'est pas null et fermez-le.
Autres conseils
Il peut être dû au verrouillage acquis par le système de fichiers.Au lieu de AddFile (), vous pouvez essayer ce qui suit.
ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract");
ContentStreamBase.FileStream fileStream = new FileStream(file);
req.addContentStream(fileStream);
shishir