Commit f9d66fcc authored by Jonathan Haas's avatar Jonathan Haas

Merge branch 'bugfix/geloeschte_container' into 'develop'

Defekte gelöschte Containerdateien besser behandeln

See merge request ERZ/SWE_de.bsvrz.ars.ars!11
parents d1a2362a c893e955
# Release Notes
## [Noch nicht veröffentlicht]
- Defekte Containerdateien werden nun beim Wiederherstellungslauf und beim Update der
Datenstrukturen auf das neue Format zuverlässiger erkannt.
Durch das neue Aufrufargument
`-defekteDateienVerschieben=[nein|ja]`
kann das Archivsystem angewiesen werden, defekte Dateien zu ignorieren und umzubenennen.
Damit kann das Archivsystem nun auch gestartet werden, wenn einige Dateien defekt
sind, und man muss diese nicht manuell löschen.
Wird der Parameter nicht angegeben, wird automatisch der Defaultwert "nein" verwendet.
Wird der Aufrufparamter ohne Wert angegeben (`-defekteDateienVerschieben`) wird der Wert "ja" gesetzt.
- Die Korrektur von defekten Containerdateien (Nerz-Ä-79) erkennt nun auch zu kurze
Containerdateien ohne oder mit unvollständigem Header und sorgt dafür, dass diese ignoriert werden.
- [Fehler 8](https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.ars.ars/issues/8): Eine Archivinformationsanfrage mit einem Anfragebereich, in dem keine Daten ermittelbar sind, resultierte in einem Ergebnis von Zeitstempel -1 bis -1 (1.1.1970 bis 1.1.1970) und Markierung "Keine Lücke". Dieser Datensatz wird nun nicht mehr gesendet.
......
......@@ -2,7 +2,7 @@
// NERZ-SWE-Plugin
//--------------------------------------------------------------------
plugins {
id "de.bsvrz.gradle.nerzswe" version "0.9.0"
id "de.bsvrz.gradle.nerzswe" version "0.12.0"
}
//--------------------------------------------------------------------
......@@ -22,7 +22,7 @@ nerzswe {
//--------------------------------------------------------------------
// Abhängigkeiten
//--------------------------------------------------------------------
String kernsoftware_version = '3.10.0'
String kernsoftware_version = '3.12.0'
dependencies {
compile group: 'de.bsvrz.dav', name: 'de.bsvrz.dav.daf', version: kernsoftware_version
compile group: 'de.bsvrz.sys', name: 'de.bsvrz.sys.funclib.losb', version: kernsoftware_version
......@@ -35,17 +35,18 @@ dependencies {
compile group: 'de.bsvrz.sys', name: 'de.bsvrz.sys.funclib.kappich', version: kernsoftware_version
compile group: 'com.google.guava', name: 'guava', version: '21.0'
// Abhängigkeiten Integrationstests
testCompile group: 'de.kappich.pat', name: 'de.kappich.pat.testumg', version: kernsoftware_version
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'
// Abhängigkeiten Integrationstests
testCompile group: 'de.kappich.pat', name: 'de.kappich.pat.testumg', version: '1.1.0'
}
// Fehler durch statische Fields vermeiden
tasks.integrationTests.forkEvery = 1
// Assertions aktivieren
// Assertions aktivieren, trotz Fehler weiter machen
tasks.withType(Test) {
enableAssertions = true
ignoreFailures = true
}
......@@ -96,7 +96,7 @@ public abstract class ArchiveTest {
protected final SingleDavStarter _davTestEnvironment = new SingleDavStarter();
public final ArchiveTestApplication am = new ArchiveTestApplication(_davTestEnvironment, LOGLEVEL, "Tester");
public final ArchiveTestApplication am = new ArchiveTestApplication(_davTestEnvironment, "Tester");
protected static final String TEST_QUITTASP = "asp.parameterSoll";
......
......@@ -83,7 +83,7 @@ public class ExtendedOnlineArchiveTest extends ArchiveTest {
catch(Exception e) {
System.out.println("Fehler in OnlineArchiveTest.onlineTearDown e = " + e);
}
_davTestEnvironment.stopDav(false);
_davTestEnvironment.stop();
}
protected ClientDavInterface getDav() {
......
......@@ -100,7 +100,7 @@ public class OnlineArchiveTest extends ArchiveTest {
}
_config = null;
_daf = null;
_davTestEnvironment.stopDav(false);
_davTestEnvironment.stop();
}
protected ClientDavInterface getDav() {
......
......@@ -69,7 +69,7 @@ import static org.junit.Assert.*;
public class TestArchiveNachfordern_Ausgelagert extends ExtendedOnlineArchiveTest {
private ArchiveTestApplication am2 = new ArchiveTestApplication(getDavTestEnvironment(),"WARNING", "Tester", Collections.emptyList(), null, KV2);
private ArchiveTestApplication am2 = new ArchiveTestApplication(getDavTestEnvironment(), "Tester", Collections.emptyList(), null, KV2);
private static final String KV2 = "kv.testArchiv2";
......
......@@ -143,7 +143,7 @@ public class TestArchiveQuick_LogIn_LogOut extends OnlineArchiveTest {
public int containerGroesse = 30;
public ArchiveTestApplication am = new ArchiveTestApplication(getDavTestEnvironment(), "WARNING", "Tester");
public ArchiveTestApplication am = new ArchiveTestApplication(getDavTestEnvironment(), "Tester");
public void run() {
System.out.println("Thread gestartet.");
......
......@@ -85,9 +85,9 @@ public class TestArchiveRequest extends ExtendedOnlineArchiveTest {
private static DummyTask dt = new DummyTask(), dt2 = new DummyTask();
private ArchiveTestApplication am2 = new ArchiveTestApplication(getDavTestEnvironment(), "WARNING", "Tester", Collections.emptyList(), null, KV2);
private ArchiveTestApplication am2 = new ArchiveTestApplication(getDavTestEnvironment(), "Tester", Collections.emptyList(), null, KV2);
private ArchiveTestApplication am3 = new ArchiveTestApplication(getDavTestEnvironment(), "WARNING", "Tester", Collections.emptyList(), null, KV3);
private ArchiveTestApplication am3 = new ArchiveTestApplication(getDavTestEnvironment(), "Tester", Collections.emptyList(), null, KV3);
private BasicContainerFileHandle _iterHandle;
......
......@@ -54,8 +54,8 @@ public class TestArchiveRequestProtocol extends ExtendedOnlineArchiveTest {
private static final String P_DIR3 = System.getProperty("java.io.tmpdir") + File.separator + "ArcTest3";
private ArchiveTestApplication am2 = new ArchiveTestApplication(getDavTestEnvironment(), LOGLEVEL, "Tester", Collections.emptyList(), null, KV2);
private ArchiveTestApplication am3 = new ArchiveTestApplication(getDavTestEnvironment(), LOGLEVEL, "Tester", Collections.emptyList(), null, KV3);
private ArchiveTestApplication am2 = new ArchiveTestApplication(getDavTestEnvironment(), "Tester", Collections.emptyList(), null, KV2);
private ArchiveTestApplication am3 = new ArchiveTestApplication(getDavTestEnvironment(), "Tester", Collections.emptyList(), null, KV3);
@Before
......
......@@ -69,7 +69,7 @@ public class TestPidArchiveRequest extends ArchiveTest {
if(am != null){
Thread.sleep(1000);
am.quitNoExit();
_davTestEnvironment.stopDav(false);
_davTestEnvironment.stop();
}
_davTestEnvironment.start("kb.testPidArchiveRequest:" + i);
_daf = _davTestEnvironment.connect();
......@@ -88,7 +88,7 @@ public class TestPidArchiveRequest extends ArchiveTest {
_daf.disconnect(false, "");
_daf=null;
}
_davTestEnvironment.stopDav(true);
_davTestEnvironment.stop();
}
private void sendDataSets(final int i) throws Exception {
......
......@@ -75,7 +75,7 @@ public class TestBackupDoubleFail {
backupProps.setProperty("backupModul", "de.bsvrz.ars.ars.bugreports.SuperFailingBackup");
backupProps.setProperty("containerPerZip", "2");
backupProps.setProperty("sicherungsMedienGroesseKB", "3");
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Collections.emptyList(), backupProps);
return new ArchiveTestApplication(davStarter, "Tester", Collections.emptyList(), backupProps);
}
@After
......
......@@ -75,7 +75,7 @@ public class TestBackupFail {
backupProps.setProperty("backupModul", "de.bsvrz.ars.ars.bugreports.FailingBackup");
backupProps.setProperty("containerPerZip", "2");
backupProps.setProperty("sicherungsMedienGroesseKB", "3");
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Collections.emptyList(), backupProps);
return new ArchiveTestApplication(davStarter, "Tester", Collections.emptyList(), backupProps);
}
@After
......
......@@ -78,7 +78,7 @@ public class TestBackupTerminate {
backupProps.setProperty("backupModul", "de.bsvrz.ars.ars.bugreports.SlowBackup");
backupProps.setProperty("containerPerZip", "2");
backupProps.setProperty("sicherungsMedienGroesseKB", "3");
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Collections.emptyList(), backupProps);
return new ArchiveTestApplication(davStarter, "Tester", Collections.emptyList(), backupProps);
}
@After
......
......@@ -80,7 +80,7 @@ public class TestDeleteData {
@NotNull
public ArchiveTestApplication createArchive(final String dav) throws Exception {
MultiDavTestEnvironment.MultiDavStarter davStarter = _multiDavTestEnvironment.getDav(dav);
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Collections.emptyList());
return new ArchiveTestApplication(davStarter, "Tester", Collections.emptyList());
}
@After
......
......@@ -35,7 +35,6 @@ import de.bsvrz.sys.funclib.kappich.annotations.NotNull;
import de.kappich.pat.testumg.util.MultiDavTestEnvironment;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.Collections;
......@@ -73,7 +72,7 @@ public class TestMemoryLeakF100 {
@NotNull
public ArchiveTestApplication createArchive(final String dav) throws Exception {
MultiDavTestEnvironment.MultiDavStarter davStarter = _multiDavTestEnvironment.getDav(dav);
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Collections.emptyList());
return new ArchiveTestApplication(davStarter, "Tester", Collections.emptyList());
}
@After
......
......@@ -94,7 +94,7 @@ public class TestMultiDavArchive {
@NotNull
public ArchiveTestApplication createArchive(final String dav) throws Exception {
MultiDavTestEnvironment.MultiDavStarter davStarter = _multiDavTestEnvironment.getDav(dav);
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Collections.emptyList());
return new ArchiveTestApplication(davStarter, "Tester", Collections.emptyList());
}
@After
......
......@@ -66,7 +66,7 @@ public class TestQueueSize {
@NotNull
public ArchiveTestApplication createArchive(final String dav) throws Exception {
MultiDavTestEnvironment.MultiDavStarter davStarter = _multiDavTestEnvironment.getDav(dav);
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Collections.emptyList());
return new ArchiveTestApplication(davStarter, "Tester", Collections.emptyList());
}
@After
......
......@@ -61,7 +61,7 @@ public class TestSubscriptionDelay {
@NotNull
public ArchiveTestApplication createArchive(final String dav) throws Exception {
MultiDavTestEnvironment.MultiDavStarter davStarter = _multiDavTestEnvironment.getDav(dav);
return new ArchiveTestApplication(davStarter, "INFO", "Tester", Arrays.asList("-maxAnmeldungenGleichzeitig=1", "-maxAnmeldungenProSekunde=1"));
return new ArchiveTestApplication(davStarter, "Tester", Arrays.asList("-maxAnmeldungenGleichzeitig=1", "-maxAnmeldungenProSekunde=1"));
}
@After
......
......@@ -54,21 +54,24 @@ public class TestDamagedContainer extends ExtendedOnlineArchiveTest {
@Test(timeout = 200000)
public void testDamagedContainers() throws Exception {
startArS_Setup(3);
startArS_Setup(4);
sendDataWait(0, 13, TIMEOUT_60);
sendDataWait(1, 13, TIMEOUT_60);
sendDataWait(2, 13, TIMEOUT_60);
sendDataWait(3, 13, TIMEOUT_60);
String contDir0 = getContDir(am, 0, ArchiveDataKind.ONLINE);
String contDir1 = getContDir(am, 1, ArchiveDataKind.ONLINE);
String contDir2 = getContDir(am, 2, ArchiveDataKind.ONLINE);
String contDir3 = getContDir(am, 3, ArchiveDataKind.ONLINE);
// Die offenen Container haben die IDs 2, 4, 6
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir0));
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir1));
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir2));
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir3));
Thread.sleep(1000);
quitArS(1000);
......@@ -79,6 +82,7 @@ public class TestDamagedContainer extends ExtendedOnlineArchiveTest {
destroyContainer1(contDir0, 2);
destroyContainer2(contDir1, 4);
destroyContainer3(contDir2, 6);
destroyContainer4(contDir3, 8);
includeNoDataNoSourcePotGap(); // Sicherstellen, dass Lücke nicht unterdrückt wird
......@@ -87,10 +91,12 @@ public class TestDamagedContainer extends ExtendedOnlineArchiveTest {
sendDataWait(0, 3, TIMEOUT_60);
sendDataWait(1, 3, TIMEOUT_60);
sendDataWait(2, 3, TIMEOUT_60);
sendDataWait(3, 3, TIMEOUT_60);
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir0));
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir1));
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir2));
ArchiveFileViewer.analyzeFileOrDirectory(new File(contDir3));
Thread.sleep(1000);
}
......@@ -132,6 +138,17 @@ public class TestDamagedContainer extends ExtendedOnlineArchiveTest {
}
}
}
/**
* Verkürzt die Containerdatei auf 0 Bytes
* @param contDir
* @param contId
*/
private void destroyContainer4(final String contDir, final int contId) throws IOException {
try(RandomAccessFile raf = new RandomAccessFile(new File(contDir, PersistenceManager.getContFileName(contId)), "rw")) {
raf.setLength(0);
}
}
private void startArS_Setup(int anzObj) throws Exception {
String[] subscrObjs = new String[anzObj];
......
......@@ -28,7 +28,6 @@
package de.bsvrz.ars.ars.persistence;
import de.bsvrz.ars.ars.mgmt.tasks.DummyTask;
import de.bsvrz.ars.ars.persistence.index.IndexException;
import de.kappich.pat.testumg.util.DavTestEnvironment;
import de.kappich.pat.testumg.util.FileCopy;
......@@ -40,7 +39,7 @@ import java.io.InputStream;
import java.net.URL;
/**
* JUnit-Test der Klasse {@link PersistenceManager}. Testet bisher lediglich die Methode getLargestContainerID().
* JUnit-Test der Klasse {@link PersistenceManager}.
*
* @author beck et al. projects GmbH
* @author Thomas Schaefer
......
......@@ -79,19 +79,19 @@ public class ArchiveTestApplication extends DafApplication<ArchiveManager> {
private Path _archivePath;
private String _archive;
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String debugLevel, final String user) {
this(dafApplicationEnvironment, debugLevel, user, Collections.emptyList());
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String user) {
this(dafApplicationEnvironment, user, Collections.emptyList());
}
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String debugLevel, final String user, final List<String> args) {
this(dafApplicationEnvironment, debugLevel, user, args, null);
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String user, final List<String> args) {
this(dafApplicationEnvironment, user, args, null);
}
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String debugLevel, final String user, final List<String> args, Properties backupProperties) {
this(dafApplicationEnvironment, debugLevel, user, args, backupProperties, dafApplicationEnvironment.getConfigurationAuthority());
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String user, final List<String> args, Properties backupProperties) {
this(dafApplicationEnvironment, user, args, backupProperties, dafApplicationEnvironment.getConfigurationAuthority());
}
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String debugLevel, final String user, final List<String> args, Properties backupProperties, final String archive) {
public ArchiveTestApplication(final DafApplicationEnvironment dafApplicationEnvironment, final String user, final List<String> args, Properties backupProperties, final String archive) {
super(dafApplicationEnvironment, c -> {
try {
ArchiveManager archiveManager = new ArchiveManager(c);
......@@ -104,7 +104,7 @@ public class ArchiveTestApplication extends DafApplication<ArchiveManager> {
catch(Exception e) {
throw new AssertionError(e);
}
}, args, debugLevel, user);
}, args, user);
_backupProperties = backupProperties;
CacheManager.getInstance().setCacheEnabled(false);
......
......@@ -60,14 +60,13 @@ public class InitArchive {
/**
* Startet das Archivsystem. Legt ein temporäres Verzeichnis für die Archivdaten an. Das Verzeichnis wird beim Herunterfahren wieder gelöscht.
*
* @param debugLevel Debug Level.
* @param davHost Host des Datenverteilers
* @param davPort Port des Datenverteilers
* @param params Liste der Aspekte, auf die das Archivsystem parametriert werden soll. Falls {@code params==null} wird die Standard-Parametrierung
* eingestellt.
*/
public InitArchive(String debugLevel, DafApplicationEnvironment environment, String[] params) throws IOException {
_testApplication = new ArchiveTestApplication(environment, debugLevel, "Tester");
public InitArchive(DafApplicationEnvironment environment, String... params) throws IOException {
_testApplication = new ArchiveTestApplication(environment, "Tester");
this.params = params;
startUp();
}
......@@ -81,7 +80,7 @@ public class InitArchive {
* @param port Port des Datenverteilers
*/
public InitArchive(String path, String passwdPath, DafApplicationEnvironment environment) throws IOException {
_testApplication = new ArchiveTestApplication(environment, "INFO", "Tester", Collections.emptyList());
_testApplication = new ArchiveTestApplication(environment, "Tester", Collections.emptyList());
startUp();
}
......@@ -92,21 +91,10 @@ public class InitArchive {
* @param passwd Dateiname der Authentifizierungsdatei.
*/
public InitArchive(boolean configure, DafApplicationEnvironment environment) throws IOException {
_testApplication = new ArchiveTestApplication(environment, "INFO", "Tester", Collections.emptyList());
_testApplication = new ArchiveTestApplication(environment, "Tester", Collections.emptyList());
startUp(configure);
}
/**
* Startet das Archivsystem. Legt ein temporäres Verzeichnis an, das beim Herunterfahren des Archivsystems wieder gelöscht wird. Entspricht {@code new
* InitArchive(WARNING, localhost, 8083)}.
*
* @param params Liste der Aspekte, auf die das Archivsystem parametriert werden soll. Falls {@code params==null} wird die Standard-Parametrierung
* eingestellt.
*/
public InitArchive(DafApplicationEnvironment environment, String... params) throws IOException {
this("WARNING", environment, params);
}
/**
* Startet das Archivsystem
*
......
......@@ -263,6 +263,8 @@ public class ArchiveManager extends DAVAppBase {
// Begrenzung der offenen Containerdateien
ContainerDataIterator.setOpenFileLimit(argLst.fetchArgument("-maxOffeneDateien=500").intValueBetween(1, Integer.MAX_VALUE));
PersistenceManager.setDeleteBrokenContainers(argLst.fetchArgument("-defekteDateienVerschieben=false").booleanValue());
// Max/Min-Vertauschung absichtlich wegen Kehrwert.
_minWaitNanosPerSubscription = (long) (1_000_000_000.0 / maxPerSecond);
_maxWaitNanosPerSubscription = (long) (1_000_000_000.0 / minPerSecond);
......
......@@ -374,13 +374,15 @@ public final class DataIdentNode {
for(Path path : paths) {
File file = path.toFile();
if(ContainerFile.CONT_FILENAME_FILTER.accept(file.getParentFile(), file.getName())) {
try(BasicContainerFileHandle handle = new BasicContainerFileHandle(file)) {
handle.readContainerHeader();
updateContainerIndex(handle, containerHeaderIndex);
}
catch(PersistenceException e) {
throw new IndexException("Fehler beim Indizieren des Containers", file, e);
}
PersistenceManager.executeOnContainer(path, () -> {
try(BasicContainerFileHandle handle = new BasicContainerFileHandle(file)) {
handle.readContainerHeader();
updateContainerIndex(handle, containerHeaderIndex);
}
catch(PersistenceException e) {
throw new IndexException("Fehler beim Indizieren des Containers", file, e);
}
});
}
}
}
......
......@@ -621,6 +621,9 @@ public class ContainerFile {
closeRandomAccessFile(raf);
}
}
catch(PersistenceException e) {
throw e;
}
catch(Exception e) {
throw new PersistenceException("Container-Header konnte nicht gelesen werden: " + e.getMessage() + "\n" + this, e);
}
......
......@@ -41,7 +41,7 @@ import java.util.NoSuchElementException;
import static de.bsvrz.ars.ars.persistence.ContainerFile.VERSION_STRING;
/**
*
* Iterator über gelöschte Containerdateien, wird nur beim Upgrade einer bisherigen verkürzten Containerdatei verwendet.
*
* @author Kappich Systemberatung
*/
......@@ -137,13 +137,15 @@ public class DeletedContainerDataIterator implements DataIterator {
*/
private static ArrayList<Long> getListOfIndexesDeleted(FileAccess raf) throws IOException {
final ArrayList<Long> iterlistOfDataIdx = new ArrayList<>();
final int iterlistOfDataIdxPos = 0;
byte[] first = new byte[ByteIO.LONG8B_LEN];
byte[] last = new byte[ByteIO.LONG8B_LEN];
while(raf.position() != raf.length()) {
raf.readFully(first);
raf.skip(1); // Separator
if(raf.readByte() != '-') {
// Separator
throw new IOException("Erwarte Separator '-' an Dateiposition " + (raf.position()-1));
}
raf.readFully(last);
long firstIdx = ByteIO.readSignedLong8Byte(first, 0);
long lastIdx = ByteIO.readSignedLong8Byte(last, 0);
......
......@@ -160,41 +160,35 @@ public class RestorePersDirTsk extends Task {
File didDir = containerFileDir.getContainerFileDir();
IdDataIdentification dataIdentification = containerFileDir.getDataIdentification();
ArchiveDataKind archiveDataKind = containerFileDir.getAdk();
try {
if(shouldTerminate()) {
containerDirWalk.terminate();
}
totalDID.getAndIncrement();
if(shouldTerminate()) {
containerDirWalk.terminate();
}
totalDID.getAndIncrement();
try {
// Indexe ggf. wiederherstellen:
File changedFlagFile = new File(didDir, PersistenceManager.REBUILDINDEX_FILE_FLAG_NAME);
boolean changedFlagFileExists = changedFlagFile.exists();
// Strategie: Wenn die _rebuildIndex.flag-Datei vorhanden ist oder einer der Indexe
// fehlt, werden die Indexe neu aufgebaut.
if(changedFlagFileExists || anyIndexFileMissing(didDir)) {
try {
long t2 = Util.startTimer();
int[] cont_rebuilt = persMgr.rebuildIndex(didDir.getAbsolutePath());
visitedCount.addAndGet(cont_rebuilt[0]);
fullyRebuildCont.addAndGet(cont_rebuilt[1]);
if(changedFlagFileExists && !changedFlagFile.delete()) {
badDID.getAndIncrement();
_debug.error(
"Wiederherstellungslauf: '" + PersistenceManager.REBUILDINDEX_FILE_FLAG_NAME + "' im Verzeichnis '" + didDir
+ "' konnte nicht geloescht werden."
);
}
else {
goodDID.getAndIncrement();
_debug.fine("Wiederherstellungslauf: Indexe in " + didDir + " erfolgreich neu aufgebaut (" + Util.stopTimer(t2) + ").");
}
}
catch(Exception e) {
long t2 = Util.startTimer();
PersistenceManager.RebuildResult cont_rebuilt = persMgr.rebuildIndex(didDir.getAbsolutePath());
visitedCount.addAndGet(cont_rebuilt.getVisited());
fullyRebuildCont.addAndGet(cont_rebuilt.getIterated());
if(changedFlagFileExists && !changedFlagFile.delete()) {
badDID.getAndIncrement();
_debug.error("Wiederherstellungslauf: Index der Datenidentifikation '" + didDir + "' konnte nicht neu angelegt werden", e);
_debug.error(
"Wiederherstellungslauf: '" + PersistenceManager.REBUILDINDEX_FILE_FLAG_NAME + "' im Verzeichnis '" + didDir
+ "' konnte nicht geloescht werden."
);
}
else {
goodDID.getAndIncrement();
_debug.fine("Wiederherstellungslauf: Indexe in " + didDir + " erfolgreich neu aufgebaut (" + Util.stopTimer(t2) + ").");
}
}
// maximale Archivzeit. Medien- und Container-ID ermitteln
......@@ -214,8 +208,8 @@ public class RestorePersDirTsk extends Task {
}
}
catch(Exception e) {
_errorCount.getAndIncrement();
_debug.error("Wiederherstellungslauf: Unbehandelter Fehler in RestorePersDirTsk im Verzeichnis " + didDir, e);
badDID.getAndIncrement();
_debug.error("Wiederherstellungslauf: Index der Datenidentifikation '" + didDir + "' konnte nicht neu angelegt werden", e);
}
}
);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment