ACS-976 Metadata extraction NPE thrown in multi-node cluster using ATS (#190)

* ACS-976 Metadata extraction NPE thrown in multi-node cluster using ATS

In a multi repo node cluster, it is possible one node requests a metadata extract via the ATS and
that another responds to it. In this case the responder needs to recreate the TransformRequest. In
this case the target mimetype was wrong, resulting in the TransformRequest being sent to the wrong
code which then through a NPE because there was no replyQueue specified on the TransformRequest.

* ACS-963 Investigate testSharedLinkCreateGetDelete failures

Modified date changes. It can change now as metadata extract is async
This commit is contained in:
Alan Davis
2020-12-03 09:38:12 +00:00
committed by GitHub
parent 9e5d38dce1
commit 2d2b4357f9
3 changed files with 41 additions and 1 deletions

View File

@@ -483,7 +483,7 @@ public class SharedLinkApiTest extends AbstractBaseApiTest
response = getSingle(NodesEntityResource.class, d1Id, null, 200);
nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class);
assertEquals(docModifiedAt.getTime(), nodeResp.getModifiedAt().getTime()); // not changed
// assertEquals(docModifiedAt.getTime(), nodeResp.getModifiedAt().getTime()); // not changed - now can be as metadata extract is async
assertEquals(docModifiedBy, nodeResp.getModifiedByUser().getId()); // not changed (ie. not user2)

View File

@@ -189,6 +189,22 @@ public class AsynchronousExtractor extends AbstractMappingMetadataExtracter
return MIMETYPE_METADATA_EMBED.equals(targetMimetype);
}
public static String getTargetMimetypeFromTransformName(String transformName)
{
return transformName == null ? null
: transformName.startsWith(MIMETYPE_METADATA_EXTRACT) ? MIMETYPE_METADATA_EXTRACT
: transformName.startsWith(MIMETYPE_METADATA_EMBED) ? MIMETYPE_METADATA_EMBED
: null;
}
public static String getSourceMimetypeFromTransformName(String transformName)
{
return transformName == null ? null
: transformName.startsWith(MIMETYPE_METADATA_EXTRACT) ? transformName.substring(MIMETYPE_METADATA_EXTRACT.length()+1)
: transformName.startsWith(MIMETYPE_METADATA_EMBED) ? transformName.substring(MIMETYPE_METADATA_EMBED.length()+1)
: null;
}
/**
* Returns a file extension used as the target in a transform. The normal extension is changed if the
* {@code targetMimetype} is an extraction or embedding type.

View File

@@ -844,4 +844,28 @@ public class AsynchronousExtractorTest extends BaseSpringTest
assertEquals("Unexpected tags", 0, tags.size());
}
@Test
public void testStaticMethods()
{
assertTrue("isMetadataExtractMimetype", AsynchronousExtractor.isMetadataExtractMimetype("alfresco-metadata-extract"));
assertTrue("isMetadataEmbedMimetype", AsynchronousExtractor.isMetadataEmbedMimetype("alfresco-metadata-embed"));
assertFalse("isMetadataExtractMimetype", AsynchronousExtractor.isMetadataExtractMimetype("alfresco-metadata-embed"));
assertFalse("isMetadataEmbedMimetype", AsynchronousExtractor.isMetadataEmbedMimetype("alfresco-metadata-extract"));
assertEquals("getTargetMimetypeFromTransformName", "alfresco-metadata-extract",
AsynchronousExtractor.getTargetMimetypeFromTransformName("alfresco-metadata-extract/text/plain"));
assertEquals("getTargetMimetypeFromTransformName", "alfresco-metadata-embed",
AsynchronousExtractor.getTargetMimetypeFromTransformName("alfresco-metadata-embed/text/plain"));
assertEquals("getTargetMimetypeFromTransformName", null,
AsynchronousExtractor.getTargetMimetypeFromTransformName("anything else"));
assertEquals("getTargetMimetypeFromTransformName", null,
AsynchronousExtractor.getTargetMimetypeFromTransformName(null));
assertEquals("getTargetMimetypeFromTransformName", "text/plain",
AsynchronousExtractor.getSourceMimetypeFromTransformName("alfresco-metadata-extract/text/plain"));
assertEquals("getTargetMimetypeFromTransformName", "text/plain",
AsynchronousExtractor.getSourceMimetypeFromTransformName("alfresco-metadata-embed/text/plain"));
}
}