Skip to content
Snippets Groups Projects
Commit 971c6b2b authored by felmer's avatar felmer
Browse files

SSDM-1010: MultiDataSetArchiver.filterBasedOnArchiveStatus() slightly...

SSDM-1010: MultiDataSetArchiver.filterBasedOnArchiveStatus() slightly refactored. Test added to provoke failure of archiving.

SVN: 32724
parent f7913325
No related branches found
No related tags found
No related merge requests found
...@@ -151,15 +151,12 @@ public class MultiDataSetArchiver extends AbstractArchiverProcessingPlugin ...@@ -151,15 +151,12 @@ public class MultiDataSetArchiver extends AbstractArchiverProcessingPlugin
* <code>dataSets</code> and removes those which are present in the archive already (or not present, depending on the <code>filterOption</code>). * <code>dataSets</code> and removes those which are present in the archive already (or not present, depending on the <code>filterOption</code>).
* For those removed data sets it adds entry with <code>status</code> for <code>operation</code> in <code>result</code> * For those removed data sets it adds entry with <code>status</code> for <code>operation</code> in <code>result</code>
*/ */
private void filterBasedOnArchiveStatus(LinkedList<? extends IDatasetLocation> dataSets, DatasetProcessingStatuses result, private void filterBasedOnArchiveStatus(LinkedList<? extends IDatasetLocation> dataSets,
FilterOption filterOption, DatasetProcessingStatuses result, FilterOption filterOption, Status status, Operation operation)
Status status, Operation operation)
{ {
for (Iterator<? extends IDatasetLocation> iterator = dataSets.iterator(); iterator.hasNext();)
Iterator<? extends IDatasetLocation> it = dataSets.iterator();
while (it.hasNext())
{ {
IDatasetLocation dataSet = it.next(); IDatasetLocation dataSet = iterator.next();
boolean isPresentInArchive = isDataSetPresentInArchive(dataSet.getDataSetCode()); boolean isPresentInArchive = isDataSetPresentInArchive(dataSet.getDataSetCode());
boolean isFiltered; boolean isFiltered;
...@@ -179,7 +176,7 @@ public class MultiDataSetArchiver extends AbstractArchiverProcessingPlugin ...@@ -179,7 +176,7 @@ public class MultiDataSetArchiver extends AbstractArchiverProcessingPlugin
if (isFiltered) if (isFiltered)
{ {
result.addResult(dataSet.getDataSetCode(), status, operation); result.addResult(dataSet.getDataSetCode(), status, operation);
it.remove(); iterator.remove();
} }
} }
} }
......
...@@ -118,6 +118,10 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -118,6 +118,10 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
private List<MultiDataSetArchiverDataSetDTO> dataSets = new ArrayList<MultiDataSetArchiverDataSetDTO>(); private List<MultiDataSetArchiverDataSetDTO> dataSets = new ArrayList<MultiDataSetArchiverDataSetDTO>();
private List<MultiDataSetArchiverContainerDTO> uncommittedContainers = new ArrayList<MultiDataSetArchiverContainerDTO>();
private List<MultiDataSetArchiverDataSetDTO> uncommittedDataSets = new ArrayList<MultiDataSetArchiverDataSetDTO>();
private boolean committed; private boolean committed;
private boolean rolledBack; private boolean rolledBack;
...@@ -140,7 +144,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -140,7 +144,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
public MultiDataSetArchiverContainerDTO createContainer(String path) public MultiDataSetArchiverContainerDTO createContainer(String path)
{ {
MultiDataSetArchiverContainerDTO container = new MultiDataSetArchiverContainerDTO(id++, path); MultiDataSetArchiverContainerDTO container = new MultiDataSetArchiverContainerDTO(id++, path);
containers.add(container); uncommittedContainers.add(container);
return container; return container;
} }
...@@ -150,7 +154,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -150,7 +154,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
String dataSetCode = dataSet.getDataSetCode(); String dataSetCode = dataSet.getDataSetCode();
Long dataSetSize = dataSet.getDataSetSize(); Long dataSetSize = dataSet.getDataSetSize();
MultiDataSetArchiverDataSetDTO dataSetDTO = new MultiDataSetArchiverDataSetDTO(id++, dataSetCode, container.getId(), dataSetSize); MultiDataSetArchiverDataSetDTO dataSetDTO = new MultiDataSetArchiverDataSetDTO(id++, dataSetCode, container.getId(), dataSetSize);
dataSets.add(dataSetDTO); uncommittedDataSets.add(dataSetDTO);
return dataSetDTO; return dataSetDTO;
} }
...@@ -210,13 +214,23 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -210,13 +214,23 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
@Override @Override
public void commit() public void commit()
{ {
containers.addAll(uncommittedContainers);
dataSets.addAll(uncommittedDataSets);
committed = true; committed = true;
clearUncommitted();
} }
@Override @Override
public void rollback() public void rollback()
{ {
rolledBack = true; rolledBack = true;
clearUncommitted();
}
private void clearUncommitted()
{
uncommittedContainers.clear();
uncommittedDataSets.clear();
} }
@Override @Override
...@@ -244,7 +258,23 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -244,7 +258,23 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
{ {
builder.append('\n').append(dataSet); builder.append('\n').append(dataSet);
} }
builder.append("\ncomitted: ").append(committed); if (uncommittedContainers.isEmpty() == false)
{
builder.append("\nUncommitted containers:");
for (MultiDataSetArchiverContainerDTO container : uncommittedContainers)
{
builder.append('\n').append(container);
}
}
if (uncommittedDataSets.isEmpty() == false)
{
builder.append("\nUncommitted data sets:");
for (MultiDataSetArchiverDataSetDTO dataSet : uncommittedDataSets)
{
builder.append('\n').append(dataSet);
}
}
builder.append("\ncommitted: ").append(committed);
builder.append(", rolledBack: ").append(rolledBack); builder.append(", rolledBack: ").append(rolledBack);
return builder.toString(); return builder.toString();
} }
...@@ -450,7 +480,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -450,7 +480,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
+ "to be archived with multi dataset archiver because minimum size is 35 bytes.\"]", + "to be archived with multi dataset archiver because minimum size is 35 bytes.\"]",
status.getErrorStatuses().toString()); status.getErrorStatuses().toString());
assertEquals("[ds1, ds2]: AVAILABLE false\n", statusUpdater.toString()); assertEquals("[ds1, ds2]: AVAILABLE false\n", statusUpdater.toString());
assertEquals("Containers:\nData sets:\ncomitted: false, rolledBack: true", transaction.toString()); assertEquals("Containers:\nData sets:\ncommitted: false, rolledBack: true", transaction.toString());
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
...@@ -469,7 +499,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -469,7 +499,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
+ "to be archived with multi dataset archiver because maximum size is 27 bytes.\"]", + "to be archived with multi dataset archiver because maximum size is 27 bytes.\"]",
status.getErrorStatuses().toString()); status.getErrorStatuses().toString());
assertEquals("[ds1, ds2]: AVAILABLE false\n", statusUpdater.toString()); assertEquals("[ds1, ds2]: AVAILABLE false\n", statusUpdater.toString());
assertEquals("Containers:\nData sets:\ncomitted: false, rolledBack: true", transaction.toString()); assertEquals("Containers:\nData sets:\ncommitted: false, rolledBack: true", transaction.toString());
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
...@@ -513,7 +543,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -513,7 +543,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
assertEquals("[ds2]: AVAILABLE true\n", statusUpdater.toString()); assertEquals("[ds2]: AVAILABLE true\n", statusUpdater.toString());
assertEquals("Containers:\nMultiDataSetArchiverContainerDTO [id=0, path=ds2.tar]\n" assertEquals("Containers:\nMultiDataSetArchiverContainerDTO [id=0, path=ds2.tar]\n"
+ "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds2, containerId=0, sizeInBytes=20]\n" + "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds2, containerId=0, sizeInBytes=20]\n"
+ "comitted: true, rolledBack: false", transaction.toString()); + "committed: true, rolledBack: false", transaction.toString());
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
...@@ -579,7 +609,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -579,7 +609,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
assertEquals("Containers:\nMultiDataSetArchiverContainerDTO [id=0, path=ds1.tar]\n" assertEquals("Containers:\nMultiDataSetArchiverContainerDTO [id=0, path=ds1.tar]\n"
+ "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds1, containerId=0, sizeInBytes=10]\n" + "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds1, containerId=0, sizeInBytes=10]\n"
+ "MultiDataSetArchiverDataSetDTO [id=2, code=ds2, containerId=0, sizeInBytes=20]\n" + "MultiDataSetArchiverDataSetDTO [id=2, code=ds2, containerId=0, sizeInBytes=20]\n"
+ "comitted: true, rolledBack: false", transaction.toString()); + "committed: true, rolledBack: false", transaction.toString());
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
...@@ -590,6 +620,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -590,6 +620,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
MultiDataSetArchiverContainerDTO container = transaction.createContainer("path"); MultiDataSetArchiverContainerDTO container = transaction.createContainer("path");
ds2.setDataSetSize(20L); ds2.setDataSetSize(20L);
transaction.insertDataset(ds2, container); transaction.insertDataset(ds2, container);
transaction.commit();
MultiDataSetArchiver archiver = createArchiver(null); MultiDataSetArchiver archiver = createArchiver(null);
ProcessingStatus status = archiver.archive(Arrays.asList(ds2), archiverContext, false); ProcessingStatus status = archiver.archive(Arrays.asList(ds2), archiverContext, false);
...@@ -602,7 +633,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -602,7 +633,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
assertEquals("[ds2]: AVAILABLE true\n", statusUpdater.toString()); assertEquals("[ds2]: AVAILABLE true\n", statusUpdater.toString());
assertEquals("Containers:\nMultiDataSetArchiverContainerDTO [id=0, path=path]\n" assertEquals("Containers:\nMultiDataSetArchiverContainerDTO [id=0, path=path]\n"
+ "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds2, containerId=0, sizeInBytes=20]\n" + "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds2, containerId=0, sizeInBytes=20]\n"
+ "comitted: false, rolledBack: false", transaction.toString()); + "committed: true, rolledBack: false", transaction.toString());
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
...@@ -615,6 +646,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -615,6 +646,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
MultiDataSetArchiverContainerDTO container = transaction.createContainer("path"); MultiDataSetArchiverContainerDTO container = transaction.createContainer("path");
ds2.setDataSetSize(20L); ds2.setDataSetSize(20L);
transaction.insertDataset(ds2, container); transaction.insertDataset(ds2, container);
transaction.commit();
assertEquals(true, new File(share, ds1.getDataSetCode()).exists()); assertEquals(true, new File(share, ds1.getDataSetCode()).exists());
assertEquals(true, new File(share, ds2.getDataSetCode()).exists()); assertEquals(true, new File(share, ds2.getDataSetCode()).exists());
...@@ -655,16 +687,15 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -655,16 +687,15 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
+ "MultiDataSetArchiverContainerDTO [id=2, path=ds1.tar]\n" + "MultiDataSetArchiverContainerDTO [id=2, path=ds1.tar]\n"
+ "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds2, containerId=0, sizeInBytes=20]\n" + "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds2, containerId=0, sizeInBytes=20]\n"
+ "MultiDataSetArchiverDataSetDTO [id=3, code=ds1, containerId=2, sizeInBytes=10]\n" + "MultiDataSetArchiverDataSetDTO [id=3, code=ds1, containerId=2, sizeInBytes=10]\n"
+ "comitted: true, rolledBack: false", transaction.toString()); + "committed: true, rolledBack: false", transaction.toString());
assertEquals("[Dataset 'ds1', Dataset 'ds2']\n", dataSetDeleter.toString()); assertEquals("[Dataset 'ds1', Dataset 'ds2']\n", dataSetDeleter.toString());
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
// @Test @Test
public void testArchiveDataSetFails() public void testArchiveDataSetFails()
{ {
prepareUpdateShareIdAndSize(ds2, 20); prepareUpdateShareIdAndSize(ds2, 20);
prepareLockAndReleaseDataSet(ds2);
properties.setProperty(MINIMUM_CONTAINER_SIZE_IN_BYTES, "15"); properties.setProperty(MINIMUM_CONTAINER_SIZE_IN_BYTES, "15");
final String containerPath = "data-set-path"; final String containerPath = "data-set-path";
prepareFileOperationsGenerateContainerPath(containerPath, ds2); prepareFileOperationsGenerateContainerPath(containerPath, ds2);
...@@ -680,15 +711,12 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -680,15 +711,12 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
MultiDataSetArchiver archiver = createArchiver(fileOperations); MultiDataSetArchiver archiver = createArchiver(fileOperations);
ProcessingStatus status = archiver.archive(Arrays.asList(ds2), archiverContext, false); ProcessingStatus status = archiver.archive(Arrays.asList(ds2), archiverContext, false);
assertEquals("", logRecorder.getLogContent()); assertEquals("[ERROR: \"Couldn't create package file in stage archive data-set-path\"]", status.getErrorStatuses().toString());
assertEquals("[ERROR: \"Archiving failed to calculate dataset sizes:Oohps!\"]", status.getErrorStatuses().toString());
assertEquals("[]", Arrays.asList(staging.listFiles()).toString()); assertEquals("[]", Arrays.asList(staging.listFiles()).toString());
File archiveFile = new File(archive, ds2.getDataSetCode() + ".tar"); File archiveFile = new File(archive, ds2.getDataSetCode() + ".tar");
assertEquals(false, archiveFile.exists()); assertEquals(false, archiveFile.exists());
assertEquals("[ds2]: AVAILABLE true\n", statusUpdater.toString()); assertEquals("[ds2]: AVAILABLE false\n", statusUpdater.toString());
assertEquals("Containers:\nMultiDataSetArchiverContainerDTO [id=0, path=ds2.tar]\n" assertEquals("Containers:\nData sets:\ncommitted: false, rolledBack: true", transaction.toString());
+ "Data sets:\nMultiDataSetArchiverDataSetDTO [id=1, code=ds2, containerId=0, sizeInBytes=20]\n"
+ "comitted: true, rolledBack: false", transaction.toString());
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
...@@ -736,6 +764,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -736,6 +764,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
ds2.setDataSetSize(20L); ds2.setDataSetSize(20L);
transaction.insertDataset(ds1, c1); transaction.insertDataset(ds1, c1);
transaction.insertDataset(ds2, c2); transaction.insertDataset(ds2, c2);
transaction.commit();
properties.setProperty(MINIMUM_CONTAINER_SIZE_IN_BYTES, "15"); properties.setProperty(MINIMUM_CONTAINER_SIZE_IN_BYTES, "15");
MultiDataSetArchiver archiver = createArchiver(null); MultiDataSetArchiver archiver = createArchiver(null);
...@@ -755,6 +784,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -755,6 +784,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
ds2.setDataSetSize(20L); ds2.setDataSetSize(20L);
transaction.insertDataset(ds1, c1); transaction.insertDataset(ds1, c1);
transaction.insertDataset(ds2, c1); transaction.insertDataset(ds2, c1);
transaction.commit();
MultiDataSetArchiver archiver = createArchiver(null); MultiDataSetArchiver archiver = createArchiver(null);
List<String> codes = archiver.getDataSetCodesForUnarchiving(Arrays.asList(ds2.getDataSetCode())); List<String> codes = archiver.getDataSetCodesForUnarchiving(Arrays.asList(ds2.getDataSetCode()));
...@@ -772,6 +802,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase ...@@ -772,6 +802,7 @@ public class MultiDataSetArchiverTest extends AbstractFileSystemTestCase
ds2.setDataSetSize(20L); ds2.setDataSetSize(20L);
transaction.insertDataset(ds1, c1); transaction.insertDataset(ds1, c1);
transaction.insertDataset(ds2, c2); transaction.insertDataset(ds2, c2);
transaction.commit();
MultiDataSetArchiver archiver = createArchiver(null); MultiDataSetArchiver archiver = createArchiver(null);
try try
......
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