Commit ae2f9c85 authored by Jonathan Haas's avatar Jonathan Haas

Merge branch 'bugfix/headerread' into 'develop'

Weitere Korrekturen der Container-Reparatur

See merge request ERZ/SWE_de.bsvrz.ars.ars!17
parents be082fb6 179259e6
......@@ -15,6 +15,8 @@
- 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.
- Die Korrektur von Containerdateien erkennt nun Container mit Datenzeitstempel-Werten von 0 (=1. Jan 1970) nicht mehr als Fehlerhaft, da solche Daten wirklich schon archiviert wurden.
- [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.
......
......@@ -1325,7 +1325,7 @@ public final class DataIdentNode {
updateContainerIndex(containerFile, getHeaderIdx(containerFile.getArchiveDataKind()));
}
private static void updateContainerIndex(final ContainerManagementData containerFile, final ContainerManagementIndex index) throws PersistenceException {
public static void updateContainerIndex(final ContainerManagementData containerFile, final ContainerManagementIndex index) throws PersistenceException {
for(ContainerManagementInformation information : ContainerManagementInformation.values()) {
if(information.isNumeric()) {
long paramAsLong = containerFile.getContainerHeaderParamAsLong(information);
......
......@@ -213,10 +213,21 @@ public class ContainerFileHandle extends BasicContainerFileHandle {
* @throws PersistenceException Lesefehler im Persistenzverzeichnis
*/
public void writeContainerHeader() throws PersistenceException {
writeContainerHeaderWithoutUpdatingIndex();
_din.updateContainerIndex(this);
}
/**
* Die mit {@link #setContainerHeaderParam(KeyValParam, String)} gesetzten Parameter werden im Container-Header persistiert.
*
* Diese Methode aktualisiert den Verwaltugnsdatenindex nicht und kann z. B. benutzt werden, währen ein Container repariert wird bevor der Index aufgebaut ist.
*
* @throws PersistenceException Lesefehler im Persistenzverzeichnis
*/
public void writeContainerHeaderWithoutUpdatingIndex() throws PersistenceException {
assertWriteAccess();
getContainerFile().writeContainerHeader();
_din.updateContainerIndex(this);
}
......
......@@ -1250,10 +1250,10 @@ public final class PersistenceManager {
long minAtime = handle.getContainerHeaderParamAsLong(ContainerManagementInformation.CHP_ARC_TIME_MIN);
long maxAtime = handle.getContainerHeaderParamAsLong(ContainerManagementInformation.CHP_ARC_TIME_MAX);
// Testen ob noch Werte auf dem Default sind.
// Die Datenzeit nicht vergleichen, denn diese kann u. U. legitim 0 sein (wenn z. B. über TLS fragwürdige Daten empfangen werden)
boolean rebuildHeader = Long.parseLong(ContainerHdr.CHP_DATA_IDX_MIN.getDefaultVal()) == minDidx
|| Long.parseLong(ContainerHdr.CHP_DATA_IDX_MAX.getDefaultVal()) == maxDidx
|| Long.parseLong(ContainerHdr.CHP_DATA_TIME_MIN.getDefaultVal()) == minDtime
|| Long.parseLong(ContainerHdr.CHP_DATA_TIME_MAX.getDefaultVal()) == maxDtime
|| Long.parseLong(ContainerHdr.CHP_ARC_TIME_MIN.getDefaultVal()) == minAtime
|| Long.parseLong(ContainerHdr.CHP_ARC_TIME_MAX.getDefaultVal()) == maxAtime;
......@@ -1334,7 +1334,11 @@ public final class PersistenceManager {
containerFileHandle.setContainerHeaderParam(ContainerHdr.CHP_DATA_TIME_MAX, maxDtime);
containerFileHandle.setContainerHeaderParam(ContainerHdr.CHP_ARC_TIME_MIN, minAtime);
containerFileHandle.setContainerHeaderParam(ContainerHdr.CHP_ARC_TIME_MAX, maxAtime);
containerFileHandle.writeContainerHeader();
// Den gerade wiederhergestellten Index korrigieren, nicht den in der DataIdentNode
containerFileHandle.writeContainerHeaderWithoutUpdatingIndex();
DataIdentNode.updateContainerIndex(containerFileHandle, containerRestoreParams.getContHdrIdx());
logger.warning("Container-Header musste wiederhergestellt werden: " + didPath + " Container: " + contFile);
}
}
......
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