Skip to content
Snippets Groups Projects
Commit 6cca770a authored by felmer's avatar felmer
Browse files

SSDM-8342: data source: AbstractEntityWithPermIdDeliverer.getAllEntities() in...

SSDM-8342: data source: AbstractEntityWithPermIdDeliverer.getAllEntities() in order to get only those samples which in the requested spaces. This fixes a HTTP timeout bug caused by filtering a huge number of samples where only a few are passing the filter
parent eecd98cd
No related branches found
No related tags found
No related merge requests found
......@@ -81,13 +81,12 @@ abstract class AbstractEntityDeliverer<T> implements IDeliverer
@Override
public void deliverEntities(DeliveryExecutionContext context) throws XMLStreamException
{
IDataSourceQueryService queryService = context.getQueryService();
String sessionToken = context.getSessionToken();
List<T> allEntities = getAllEntities(queryService, sessionToken);
List<T> allEntities = getAllEntities(context, sessionToken);
executeInBatches(allEntities, entities -> deliverEntities(context, entities));
}
protected List<T> getAllEntities(IDataSourceQueryService queryService, String sessionToken)
protected List<T> getAllEntities(DeliveryExecutionContext executionContext, String sessionToken)
{
return Collections.emptyList();
}
......
......@@ -45,11 +45,17 @@ abstract class AbstractEntityWithPermIdDeliverer extends AbstractEntityDeliverer
}
@Override
protected List<String> getAllEntities(IDataSourceQueryService queryService, String sessionToken)
protected List<String> getAllEntities(DeliveryExecutionContext executionContext, String sessionToken)
{
return getAllEntities(executionContext, sessionToken, sql);
}
protected List<String> getAllEntities(DeliveryExecutionContext executionContext, String sessionToken, String query)
{
IDataSourceQueryService queryService = executionContext.getQueryService();
List<String> permIds = new ArrayList<>();
String dataSourceName = context.getOpenBisDataSourceName();
DataSet<Map<String, Object>> select = queryService.select(dataSourceName, sql);
DataSet<Map<String, Object>> select = queryService.select(dataSourceName, query);
for (Map<String, Object> row : select)
{
permIds.add((String) row.get(databasePermIdColumn));
......
......@@ -33,6 +33,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.fetchoptions.DataSetFetc
import ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.id.DataSetPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment;
import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContent;
import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode;
/**
......@@ -121,7 +122,11 @@ public class DataSetDeliverer extends AbstractEntityWithPermIdDeliverer
addAttribute(writer, "path", contentCopy.getPath());
writer.writeEndElement();
}
addFileNodes(writer, code, context.getContentProvider().asContent(code).getRootNode());
IHierarchicalContent content = context.getContentProvider().asContent(code);
if (content != null)
{
addFileNodes(writer, code, content.getRootNode());
}
writer.writeEndElement();
}
}
......
......@@ -32,7 +32,6 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.Material;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.fetchoptions.MaterialFetchOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.id.MaterialPermId;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.search.MaterialSearchCriteria;
import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.IDataSourceQueryService;
/**
* @author Franz-Josef Elmer
......@@ -46,7 +45,7 @@ public class MaterialDeliverer extends AbstractEntityDeliverer<Material>
}
@Override
protected List<Material> getAllEntities(IDataSourceQueryService queryService, String sessionToken)
protected List<Material> getAllEntities(DeliveryExecutionContext executionContext, String sessionToken)
{
MaterialSearchCriteria searchCriteria = new MaterialSearchCriteria();
......
......@@ -29,6 +29,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.EntityKind;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions;
import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId;
import ch.systemsx.cisd.common.shared.basic.string.CommaSeparatedListBuilder;
/**
* @author Franz-Josef Elmer
......@@ -88,6 +89,20 @@ public class SampleDeliverer extends AbstractEntityWithPermIdDeliverer
operationLog.info(count + " of " + samplePermIds.size() + " samples have been delivered.");
}
@Override
protected List<String> getAllEntities(DeliveryExecutionContext executionContext, String sessionToken)
{
String sql = "select perm_id from samples where space_id is null";
Set<String> spaces = executionContext.getSpaces();
if (spaces.isEmpty() == false)
{
CommaSeparatedListBuilder builder = new CommaSeparatedListBuilder();
spaces.stream().forEach(space -> builder.append("'" + space + "'"));
sql += " or space_id in (select id from spaces where code in (" + builder + "))";
}
return super.getAllEntities(executionContext, sessionToken, sql);
}
private SampleFetchOptions createFullFetchOptions()
{
SampleFetchOptions fo = new SampleFetchOptions();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment