|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.bsvrz.ars.ars.persistence.ContainerFile
public class ContainerFile
Diese Klasse enthaelt die Funktionalitaet zum Erzeugen, Lesen, Schreiben und Loeschen von Container-Dateien. Jeder Task, der mit Container-Dateien arbeitet,
enthaelt ein Objekt dieser Klasse. Die Sichtbarkeit von Konstruktor und Methoden ist beschraenkt, da diese Klasse nur durch den PersistenceManager
im gleichen Package benutzt wird. Dieser haelt fuer jede anfragende Task
ein Objekt dieser Klasse und leitet Anfragen bzgl. Container-Dateien an dieses ContainerFile
-Objekt weiter.
Field Summary | |
---|---|
private CacheManager.Cache |
_cache
|
private CacheManager |
_cacheManager
|
private static Debug |
_debug
|
private boolean |
accessed
Container adressiert. |
private byte[] |
actualWriteBuf
Referenz auf den tatsaechlichen, von ContainerFile#serializeData(ResultData,long) verwendeten Puffer, der von writeBuf
abweicht, falls dieser zu klein ist). |
private long |
aspId
Aktuelle Aspekt-ID. |
private long |
atgId
Aktuelle Attributgruppen-ID. |
private ByteArrayOutputStream |
bos
Puffer fuer den Serialisierer und zum Lesen eines Datensatzes. |
private static int |
BUFFER_SIZE
Groesse der Daten-Puffer in Byte. |
private byte[] |
byte8Buf
Puffer zum Einlesen von Laengenbytes etc. |
private static int |
COMPRESS_LEN
Laenge des Compress-Info-Feldes. |
static FilenameFilter |
CONT_FILENAME_FILTER
Filter zur Erkennung von Containerdateien anhand des Dateinamens. |
(package private) static Pattern |
CONT_FILENAME_PAT
Regulaerer Ausdruck zur Erkennung von Containerdateinamen. |
(package private) static String |
CONT_FILENAME_PREFIX
Praefix eines Containerdateinamens. |
(package private) static String |
CONT_FILENAME_SUFFIX
Dateiendung eines Containerdateinamens. |
private ContainerHdr |
containerHdr
Container-Header Parameter als Key/Value-Paare. |
private long |
containerId
Aktuelle Container-ID. |
private File |
contFile
Aktuelle Container-Datei. |
private static int |
DATAHDR_LEN
Laenge des Headers eines jeden Datensatzes. |
private ContainerDataIterator |
dataIter
Iterator fuer das Durchlaufen angefragter Datensaetze aus einem Container. |
private ArchiveDataKind |
dataKind
Aktuelle Datensatzart. |
private static int |
DATALEN_LEN
Laenge des Laengenbytes vor jedem Datensatz (4 Bytes, Integer). |
private static boolean |
DEBUG_CALLS
|
static boolean |
DECOMPRESS_QUERY_RESULTS
Falls wahr, werden Archivanfragen komprimiert beantwortet (ist langsam, weil das Stream-Interface der Kernsoftware langsam ist) |
private boolean |
deletedHeaderFlag
Gibt an, ob im aktuellen Container das "deleted"-Flag gesetzt ist |
private boolean |
deletedSpecialTreatment
Gibt an, ob ausgelagerte Container beim Nachfordern so behandelt werden, dass ein Iterator normal darüber iterieren kann |
private static int |
HEADER_LENGTH
|
private boolean |
headerRead
Container-Header eingelesen. |
(package private) byte[] |
indexListSep
Gibt den Seperator an, der für den Datenindexlistenaufbau beim Löschen eines Containers verwendet wird |
private static boolean |
IS_PERFORMANCE_TEST
Gibt an, ob gerade ein Performance-Test mit Dummy-Daten (um den Overhead durch Deserialisieren/Serialisieren zu vermeiden) laeuft. |
private int |
iterBufPos
Position innerhalb des Puffers im Speicher. |
private int |
iterBytesRead
Zahl der beim letzten iterLoadDataChunk() gelesenen Bytes. |
private boolean |
iterDataRead
Marker, ob nach jedem iterReadNextData() genau einmal iterGetDataElem() aufgerufen wurde (sonst stimmt die readPos nicht) |
private boolean |
iterEOC
Wahr, wenn das Ende eines Containers erreicht ist |
private boolean |
iterIsHdrIterator
Wahr, falls der Iterator nur ueber Min- und Maxwert aus dem Container-Header iteriert. |
private ArrayList<Long> |
iterlistOfDataIdx
Für gelöschte Container beim Nachfordern: Liste der Datenindizes im Container |
private int |
iterlistOfDataIdxPos
Für gelöschte Container beim Nachfordern: aktuelle Position in der Liste der Datenindizes |
private int |
iterNextDataLen
Laenge des naechsten Datensatzes (wird in iterReadNextData() besetzt) |
private RandomAccessFile |
iterRaf
Container-Datei. |
private int |
iterUncompressedLen
Unkomprimierte Laenge des Datensatzes (oder 0 falls dieser nicht komprimiert ist). |
static int |
MAX_UNCOMPRESSED
Datensaetze bis zu dieser Laenge bleiben immer unkomprimiert. |
private static byte[] |
NO_DATA
Datensatzbytes, falls "keine Daten" signalisiert wurde |
private static byte[] |
NO_RIGHTS
Datensatzbytes, falls "keine Rechte" signalisiert wurde |
private static byte[] |
NO_SOURCE
Datensatzbytes, falls "keine Quelle" signalisiert wurde |
static int |
NOT_COMPRESSED
Wert des Compress-Info-Feldes, wenn DS nicht komprimiert ist |
private long |
objId
Aktuelle Objekt-ID. |
private static byte[] |
PERF_TESTDATA
Dummy-Daten fuer den Performance-Test. |
private static byte[] |
POT_GAP
Datensatzbytes um eine potentielle Datenluecke zu kennzeichnen |
private byte[] |
readBuf
Puffer zum Ein-/Auslesen des Container-Headers und anderer Daten. |
private boolean |
readOnly
Container read-only adressiert. |
private Serializer |
serializer
Datensatz-Serialisierer. |
private int |
sv
Aktuelle Simulationsvariante. |
private int |
totalWriteDataSize
Laenge des von ContainerFile#serializeData(ResultData,long) serialisierten Datensatzes. |
private static byte[] |
VERSION_STRING
4 Byte langes Versionskennzeichen. |
private byte[] |
writeBuf
Puffer zum Kopieren von Dateien oder Einlesen von Strings und Zahlen. |
Constructor Summary | |
---|---|
ContainerFile()
Konstruktor fuer ContainerFile. |
Method Summary | |
---|---|
(package private) void |
accessContainer(long objId,
long atgId,
long aspId,
int sv,
ArchiveDataKind dataKind,
long contId,
File containerDir)
Definiert auf welchem Container die folgenden Methoden-Aufrufe wirksam sein sollen. |
(package private) void |
accessContainerReadOnly(File contFile)
Definiert auf welchem Container die folgenden Methoden-Aufrufe wirksam sein sollen. |
(package private) void |
appendSerializedData()
Haengt den bereits uebergebenen und serialisierten Datensatz an die aktuelle Container-Datei an. |
(package private) void |
appendSerializedDataRaf()
Haengt den bereits mit ContainerFile#preserializeData(ResultData,long) uebergebenen und serialisierten Datensatz an die aktuelle Container-Datei
an. |
private void |
checkContainerAccessed()
Prueft, ob ein Container zum Lesen im Zugriff ist. |
private void |
checkContainerAccessedHeaderRead()
Prueft, ob ein Container zum Lesen im Zugriff ist und dessen Container-Header bereits eingelesen ist. |
private void |
checkContainerAccessedRW()
Prueft, ob ein Container zum Lesen und Schreiben im Zugriff ist. |
(package private) void |
closeContainer(long containerEntries,
long minArcTime,
long maxArcTime,
long minDataTime,
long maxDataTime,
long minDataIdx,
long maxDataIdx,
long vorhalteZeit)
Schliesst die Container-Datei fuer den mit einer der accessContainer() -Methoden spezifizierten Container. |
void |
closeContainerRecount(long vorhalteZeit)
Schliesst einen Container, indem jeder Datensatz-Header des Containers gelesen wird, um die Min-/Max-Werte und die Anzahl der Datensaetze zu bestimmen. |
private void |
closeRandomAccessFile(RandomAccessFile raf)
Schliesst ein RandomAccessFile und faengt die Exception ab. |
static long |
compareContainerFile(File file1,
File file2)
Vergleicht die ID's von zwei ContainerFiles: - grösser 0, wenn die ID des ersten ContainerFiles grösser ist, als die Zweite; - kleiner 0, wenn sie kleiner ist als die Zweite; - 0, wenn sie gleich sind. |
long |
compareContainerFile(long fileID2CompareWith)
Vergleicht die ID's von zwei ContainerFiles grösser 0, wenn die ID dieses ContainerFiles grösser ist, als die zu Vergleichende kleiner 0, wenn sie kleiner ist als die zu Vergleichende 0, wenn sie gleich sind |
(package private) int |
countContainerEntries()
Zaehlt die Anzahl der Datensaetze in dem mit einer accessContainer() -Methode im Zugriff befindlichen Container durch Iterieren ueber die
Datensaetze in der Container-Datei. |
(package private) void |
createContainer(boolean toSave)
Erzeugt eine neue Container-Datei fuer den mit accessContainer() spezifizierten Container. |
(package private) byte[] |
createDataIndexBuffer()
Erzeugt eine verkürzte Liste von Datenindizes, die im aktuellen Datencontainer archiviert sind und schreibt sie in ein Byte-Array (falls z.B. |
private void |
createDefaultContainerHeader(boolean toSave)
Erzeugt Default-Header-Parameter fuer den Anfang einer neuen Container-Datei. |
private void |
createWriteBuffers()
Legt alle zum Schreiben benoetigte Puffer an. |
(package private) void |
deleteContainerData()
Loescht alle Datensaetze eines Datencontainers, so dass lediglich der Header mit der Verwaltungs-Information in der Datei erhalten bleibt. Das Header-Flag darf keinesfalls vor dem Loeschen der Daten auf "geloescht" gesetzt werden! Update 03/05/2006: Schreibt eine optimierte Liste der Datenindizes (siehe createDataIndexBuffer() ) in den Body des Datencontainers, damit Datensaetze aus geloeschten Containern beim Nachfordern
ignoriert werden koennen. |
(package private) int |
embedSerialializedData(long arcTime,
long dataTime,
long dataIdx,
byte[] serData,
byte[] dest,
Deflater compresser)
Schreibt das Bytefeld mit allen Datensatz-Headern, so dass es mit appendSerializedData() geschrieben werden kann. |
(package private) boolean |
existsContainer()
Liefert Kennzeichen, ob bereits eine Container-Datei fuer den mit #accessContainer(long,long,long,int,ArchiveDataKind,long,String) spezifizierten
Container besteht. |
private void |
flushCache()
|
private void |
forgetCache()
|
(package private) long |
getAspId()
|
(package private) long |
getAtgId()
|
private static byte[] |
getBuf(byte[] defaultBuffer,
int desiredSize)
Liefert den uebergebenen Puffer falls dessen Groesse ausreichend ist, andernfalls einen neu angelegten. |
static String |
getContainerFileName(long containerId)
Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID. |
(package private) long |
getContainerId()
|
(package private) long |
getContainerSize()
Ermittelt die Gesamtlaenge des mit accessContainer() im Zugriff befindlichen Containers. |
(package private) File |
getContFile()
|
(package private) ArchiveDataKind |
getContHdrParamAsArchiveDataKind(KeyValParam param)
Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters
ermittelt werden. |
(package private) boolean |
getContHdrParamAsBool(KeyValParam param)
|
(package private) int |
getContHdrParamAsInt(KeyValParam param)
|
(package private) long |
getContHdrParamAsLong(KeyValParam param)
Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters
ermittelt werden. |
(package private) String |
getContHdrParamAsString(KeyValParam param)
Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters
ermittelt werden. |
static long |
getContID(File file)
Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird. |
static long |
getContID(String fileName)
Liefert die Container-ID zum angegebenen Container-Datei-Namen, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird. |
static int |
getHeaderLen()
Ermittelt die Gesamtlaenge des mit accessContainer() im Zugriff befindlichen Containers. |
ArrayList<Long> |
getListOfIndexesDeleted()
|
(package private) long |
getObjId()
|
(package private) int |
getSv()
|
static int |
getTotalDataOverhead()
Ermittelt den vollstaendigen Overhead fuer einen Datensatz. |
(package private) boolean |
isContainerClosed()
Prueft ob der mit einer der accessContainer() -Methoden spezifizierte Container bereits abgeschlossen ist. |
static boolean |
isContainerFile(File f)
Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist. |
static boolean |
isContainerFileName(String name)
Liefert Kennzeichen, ob der angegebene Dateiname eine moegliche Container-Datei ist. |
private static boolean |
isGap(long start,
long end)
Prüft ob zwischen dem Index start und end eine Lücke ist. |
(package private) void |
iterClose()
Schliesst das RandomAccessFile, das zum Iterieren verwendet wurde. |
(package private) ContainerDataIterator |
iterGetDataIterator()
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers. |
(package private) ContainerDataIterator |
iterGetDataIterator(boolean considerDel)
Liefert einen Iterator zum Durchlaufen aller Datensaetze des aktuellen Containers. |
(package private) ContainerDataIterator |
iterGetHeaderIterator()
|
(package private) byte[] |
iterGetRawData(Inflater decompresser)
Liefert den naechsten Datensatz so wie er im Container gespeichert wurde. |
private void |
iterLoadDataChunk(long stepBack)
Springt stepBack Bytes in der Datei zurueck und liest Datensaetze aus in den Lese-Puffer bis dieser voll ist oder das Ende der Datei erreicht ist. |
private void |
iterLoadExtraBuffer(long stepBack,
byte[] extraBuffer)
Laedt den Datensatz in einen Extra-Puffer, weil er zu gross fuer den Standard-Buffer ist. |
(package private) boolean |
iterReadNextDataHdr()
Prueft, ob ein weiterer Datensatz zur letzten Abfrage verfuegbar ist. |
(package private) void |
iterSkipData()
Ueberspringt den naechsten Datensatz |
(package private) boolean |
iterStillCompressed()
|
(package private) void |
leaveContainer()
Beendet das Arbeiten mit dem zuvor ueber eine der accessContainer() -Methoden definierten Container. |
private static long |
noModBits(long dataIndex)
|
static void |
prepareForPerformanceTest(byte[] testDat)
Wenn diese Methode aufgerufen wird, koennen keine Daten archiviert werden. |
(package private) void |
readContainerHeader()
Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header. |
(package private) void |
readContainerHeader(RandomAccessFile raf)
|
(package private) void |
restoreHeader(File srcFile)
Der Container-Header der Container-Datei, die mit der accessContainer() -Methode spezifiziert worden ist, wird mit dem Container-Header aus der
angegebenen Container-Datei ueberschrieben. |
(package private) int |
serializeData(ResultData rd,
long arcTime,
Deflater compresser)
Serialisiert den uebergebenen Datensatz und speichert ihn in actualWriteBuf und totalWriteDataSize . |
(package private) int |
serializeDataGap(long dataIndex,
long dataTime,
long archiveTime,
Deflater compresser)
Serialisiert einen Datensatz der eine Datenluecke kennzeichnet und speichert ihn in actualWriteBuf und totalWriteDataSize . |
(package private) int |
serializeReqData(ArchiveData ad,
long arcTime,
Deflater compresser)
Serialisiert den uebergebenen Datensatz und speichert ihn in actualWriteBuf und totalWriteDataSize . |
(package private) void |
setContHdrParam(KeyValParam param,
ArchiveDataKind val)
Setzt einen Parameters im Container-Header. |
(package private) void |
setContHdrParam(KeyValParam param,
boolean val)
Setzt einen Parameters im Container-Header. |
(package private) void |
setContHdrParam(KeyValParam param,
long val)
Setzt einen Parameters im Container-Header. |
(package private) void |
setContHdrParam(KeyValParam param,
String val)
Setzt einen Parameters im Container-Header. |
void |
setListOfIndexesDeleted(RandomAccessFile raf)
Erzeugt eine Liste der Datensatz-Indizes, die im durch raf spezifizierten Container vorkommen (sortiert) |
private void |
skipContainerHeader(RandomAccessFile raf)
Springt im uebergebenen Eingabestrom an die Stelle hinter dem Header der Container-Datei. |
String |
toString()
|
void |
writeContainerHeader()
Schreibt die aktuellen Header-Parameter an den Anfang der Container-Datei. |
private byte[] |
writeDataModifier(ResultData rd)
Wenn der Originaldatensatz keine Daten enthaelt, liefert diese Methode die Daten, die stattdessen im Container (zur Markierung) gespeichert werden sollen. |
void |
writeInitialContainerHeader()
Schreibt die aktuellen Header-Parameter an den Anfang der Container-Datei. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private static final Debug _debug
private static final boolean DEBUG_CALLS
private static final byte[] VERSION_STRING
private static final int DATALEN_LEN
private static final int DATAHDR_LEN
private static final int COMPRESS_LEN
public static final int NOT_COMPRESSED
public static boolean DECOMPRESS_QUERY_RESULTS
private static final byte[] NO_SOURCE
private static final byte[] NO_DATA
private static final byte[] NO_RIGHTS
private static final byte[] POT_GAP
public static int MAX_UNCOMPRESSED
NO_SOURCE
, NO_DATA
, POT_GAP
lang sind! Auf Integer.MAX_VALUE
setzen, um die Komprimierung zu deaktivieren.
static final String CONT_FILENAME_PREFIX
static final String CONT_FILENAME_SUFFIX
static final Pattern CONT_FILENAME_PAT
public static final FilenameFilter CONT_FILENAME_FILTER
private static final int BUFFER_SIZE
private static boolean IS_PERFORMANCE_TEST
private static byte[] PERF_TESTDATA
private boolean deletedSpecialTreatment
private boolean deletedHeaderFlag
byte[] indexListSep
private byte[] byte8Buf
private byte[] writeBuf
private byte[] actualWriteBuf
ContainerFile#serializeData(ResultData,long)
verwendeten Puffer, der von writeBuf
abweicht, falls dieser zu klein ist). Notwendig, da Daten vorserialisiert werden müssen, um deren Länge zu bestimmen.
private int totalWriteDataSize
ContainerFile#serializeData(ResultData,long)
serialisierten Datensatzes.
private byte[] readBuf
private ContainerDataIterator dataIter
private ByteArrayOutputStream bos
private Serializer serializer
private ContainerHdr containerHdr
KeyValParam
statisch deklariert. Als Key eines Parameters wird KeyValParam.getKey()
benutzt.
private long objId
private long atgId
private long aspId
private int sv
private ArchiveDataKind dataKind
private long containerId
private File contFile
private boolean accessed
private boolean readOnly
private boolean headerRead
private RandomAccessFile iterRaf
private boolean iterIsHdrIterator
private int iterBufPos
iterIsHdrIterator
der Zaehler fuer gelieferten Min- und Maxwert.
private int iterUncompressedLen
private int iterBytesRead
private int iterNextDataLen
private boolean iterDataRead
private boolean iterEOC
private ArrayList<Long> iterlistOfDataIdx
private int iterlistOfDataIdxPos
private final CacheManager _cacheManager
private CacheManager.Cache _cache
private static int HEADER_LENGTH
Constructor Detail |
---|
ContainerFile()
Method Detail |
---|
public static void prepareForPerformanceTest(byte[] testDat)
testDat
- Daten, die pro Datensatz in die Container geschrieben werden.public long compareContainerFile(long fileID2CompareWith)
fileID2CompareWith
-
public static long compareContainerFile(File file1, File file2) throws PersistenceException
file1
- das erste Filefile2
- das zweite File
PersistenceException
- falls die Dateien keine ContainerFiles sindpublic String toString()
toString
in class Object
public static boolean isContainerFile(File f)
f
- Datei
public static boolean isContainerFileName(String name)
name
- Dateiname
public static long getContID(File file)
#getContainerHeaderParam(KeyValParam)
.
file
- Container-Datei
public static long getContID(String fileName)
#getContainerHeaderParam(KeyValParam)
.
file
- Container-Datei
public static String getContainerFileName(long containerId)
containerId
- Container-ID
void accessContainer(long objId, long atgId, long aspId, int sv, ArchiveDataKind dataKind, long contId, File containerDir) throws PersistenceException
leaveContainer()
aufgerufen werden.
objId
- Objekt-ID (muss >= 0 sein)atgId
- Attributgruppen-ID (muss >= 0 sein)aspId
- Aspekt-ID (muss >= 0 sein)sv
- Simulationsvariante (zwischen 0 und 999)dataKind
- DatensatzartcontId
- Container-ID (muss zwischen 0 und 2^40-1 liegen)containerDir
- Pfad des Verzeichnisses, das die Container-Datei enthaelt
PersistenceException
void accessContainerReadOnly(File contFile) throws PersistenceException
leaveContainer()
aufgerufen werden. Die Containerdatei kann einen
beliebigen Namen haben.
contFile
- Containerdatei (muss existieren)
PersistenceException
private final void flushCache() throws PersistenceException
PersistenceException
private final void forgetCache()
void leaveContainer() throws PersistenceException
accessContainer()
-Methoden definierten Container. Diese Methode muss aufgerufen werden, wenn
danach auf einen anderen Container zugegriffen werden soll. Die Methode prueft nicht, ob ein Container vorher mit #accessContainer(long,
long,long,int,ArchiveDataKind,long,String)
definiert wurde. D.h., man kann diese Methode mehrfach aufrufen. Dadurch wird die Ausnahmebehandlung
erleichtert.
PersistenceException
boolean existsContainer() throws PersistenceException
#accessContainer(long,long,long,int,ArchiveDataKind,long,String)
spezifizierten
Container besteht.
PersistenceException
void createContainer(boolean toSave) throws PersistenceException
toSave
- Sichern
PersistenceException
void closeContainer(long containerEntries, long minArcTime, long maxArcTime, long minDataTime, long maxDataTime, long minDataIdx, long maxDataIdx, long vorhalteZeit) throws PersistenceException
accessContainer()
-Methoden spezifizierten Container. Der Container-Header wird
entsprechend aktualisiert.
containerEntries
- Anzahl Datensaetze im ContainerminArcTime
- Minimaler Archivzeitstempel im ContainermaxArcTime
- Maximaler Archivzeitstempel im ContainerminDataTime
- Minimaler Datenzeitstempel im ContainermaxDataTime
- Maximaler Datenzeitstempel im ContainerminDataIdx
- Minimaler Datenindex im ContainermaxDataIdx
- Maximaler Datenindex im ContainervorhalteZeit
- parametrierte Vorhaltezeit in Sekunden
PersistenceException
public void closeContainerRecount(long vorhalteZeit) throws PersistenceException
vorhalteZeit
- parametrierte Vorhaltezeit in Sekunden
PersistenceException
boolean isContainerClosed() throws PersistenceException
accessContainer()
-Methoden spezifizierte Container bereits abgeschlossen ist.
PersistenceException
private void createDefaultContainerHeader(boolean toSave) throws PersistenceException
writeContainerHeader()
der Header geschrieben werden kann,
muss entweder mit dieser Methode ein neuer Header erzeugt oder mit readContainerHeader()
ein Header eingelesen werden.
toSave
- Sichern
PersistenceException
public void writeContainerHeader() throws PersistenceException
PersistenceException
public void writeInitialContainerHeader() throws PersistenceException
PersistenceException
void readContainerHeader(RandomAccessFile raf) throws PersistenceException
PersistenceException
void readContainerHeader() throws PersistenceException
#getContainerHeaderParam(KeyValParam)
abgefragt werden. Bevor mit writeContainerHeader()
der
Header geschrieben werden kann, muss entweder mit dieser Methode der Header eingelesen oder mit #createDefaultContainerHeader(boolean,long)
ein
neuer Header erzeugt werden.
PersistenceException
private void skipContainerHeader(RandomAccessFile raf) throws IOException
raf
- RandomAccessFile der Container-Datei
IOException
String getContHdrParamAsString(KeyValParam param) throws PersistenceException
readContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters
ermittelt werden. Wirft eine PersistenceException
, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters unabhaengig von dessen
Typ immer als String zurueck.
param
- Container-Header-Parameter
PersistenceException
ArchiveDataKind getContHdrParamAsArchiveDataKind(KeyValParam param) throws PersistenceException
readContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters
ermittelt werden. Liefert den Wert des Parameters als Datensatzart zurueck. Wirft eine PersistenceException
, falls der Parameter nicht gefunden
wurde oder nicht in den Typ ArchiveDataKind
umgeformt werden kann.
param
- Container-Header-Parameter
PersistenceException
long getContHdrParamAsLong(KeyValParam param) throws PersistenceException
readContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters
ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long
zurueck. Wirfte eine PersistenceException
, falls
der Parameter nicht gefunden wurde oder nicht in den Typ long
umgeformt werden kann.
param
- Container-Header-Parameter
long
PersistenceException
int getContHdrParamAsInt(KeyValParam param) throws PersistenceException
PersistenceException
boolean getContHdrParamAsBool(KeyValParam param) throws PersistenceException
PersistenceException
void setContHdrParam(KeyValParam param, long val) throws PersistenceException
PersistenceException
, wenn die Aenderung nicht durchgefuehrt werden kann.
param
- Container-Header-Parameterval
- Numerischer Wert des Container-Header-Parameters
PersistenceException
void setContHdrParam(KeyValParam param, boolean val) throws PersistenceException
PersistenceException
, wenn die Aenderung nicht durchgefuehrt werden kann.
param
- Container-Header-Parameterval
- Wahrheitswert des Container-Header-Parameters
PersistenceException
void setContHdrParam(KeyValParam param, String val) throws PersistenceException
PersistenceException
, wenn die Aenderung nicht durchgefuehrt werden kann.
param
- Container-Header-Parameterval
- Textwert des Container-Header-Parameters
PersistenceException
void setContHdrParam(KeyValParam param, ArchiveDataKind val) throws PersistenceException
PersistenceException
, wenn die Aenderung nicht durchgefuehrt werden kann.
param
- Container-Header-Parameterval
- Datensatzart des Container-Header-Parameters
PersistenceException
void restoreHeader(File srcFile) throws PersistenceException
accessContainer()
-Methode spezifiziert worden ist, wird mit dem Container-Header aus der
angegebenen Container-Datei ueberschrieben.
srcFile
- Container-Datei
PersistenceException
private void createWriteBuffers()
int serializeData(ResultData rd, long arcTime, Deflater compresser) throws PersistenceException
actualWriteBuf
und totalWriteDataSize
. Da der
ArchivTask vor dem Archivieren wissen muss, ob der Container zu lang wird und abgeschlossen werden muss, ist das Anhaengen eines Datensatzes auf die
Methoden ContainerFile#serializeData(ResultData,long)
und appendSerializedData()
aufgeteilt. Wenn der Datensatz ein
Spezialfall ist (keine Quelle, keine Daten, Datenluecke), wird ein speziell codierter Datensatz verwendet.
rd
- Zu archivierender DatensatzarcTime
- Archivzeitstempel
PersistenceException
int serializeReqData(ArchiveData ad, long arcTime, Deflater compresser) throws PersistenceException
actualWriteBuf
und totalWriteDataSize
. Da der
ArchivRequestedTask vor dem Archivieren wissen muss, ob der Container zu lang wird und abgeschlossen werden muss, ist das Anhaengen eines Datensatzes auf
die Methoden ContainerFile#serializeReqData(ArchivetData,long)
und appendSerializedData()
aufgeteilt. Wenn der Datensatz ein
Spezialfall ist (keine Quelle, keine Daten), wird ein speziell codierter Datensatz verwendet. Diese Methode wird zum serialisieren von nachgeforderten Datensaetzen verwendet.
ad
- Zu archivierender DatensatzarcTime
- Archivzeitstempel
PersistenceException
int serializeDataGap(long dataIndex, long dataTime, long archiveTime, Deflater compresser) throws PersistenceException
actualWriteBuf
und totalWriteDataSize
. Da der ArchivTask vor dem Archivieren wissen muss, ob der Container zu lang wird und abgeschlossen werden muss, ist das
Anhaengen eines Datensatzes auf die Methoden ContainerFile#serializeData(ResultData,long)
und appendSerializedData()
aufgeteilt.
dataIndex
- DatenindexdataTime
- DatenzeitarchiveTime
- Archivzeit
PersistenceException
int embedSerialializedData(long arcTime, long dataTime, long dataIdx, byte[] serData, byte[] dest, Deflater compresser) throws PersistenceException
appendSerializedData()
geschrieben werden kann. Von aussen wird
diese Methode nur fuer Testzwecke verwendet. Normalerweise sind die Methoden ContainerFile#serializeData(ResultData,long)
bzw. ContainerFile#serializeReqData(ResultData,long)
zu verwenden. Die Daten werden komprimiert abgelegt, wenn sie laenger als MAX_UNCOMPRESSED
sind
und die Kompression eine Verkuerzung ergeben hat.
aTime
- ArchivzeitdTime
- DatenzeitdIdx
- DatenindexserData
- zu schreibendes Bytefelddest
- Ziel
PersistenceException
void appendSerializedDataRaf() throws PersistenceException
ContainerFile#preserializeData(ResultData,long)
uebergebenen und serialisierten Datensatz an die aktuelle Container-Datei
an.
PersistenceException
void appendSerializedData() throws PersistenceException
PersistenceException
private byte[] writeDataModifier(ResultData rd) throws PersistenceException
rd
- Datensatz
PersistenceException
int countContainerEntries() throws PersistenceException
accessContainer()
-Methode im Zugriff befindlichen Container durch Iterieren ueber die
Datensaetze in der Container-Datei. Diese Methode ist nur notwendig, wenn ein noch nicht abgeschlossener Container wieder befuellt wird, weil dann die
Anzahl nicht im Header steht. Im Normalbetrieb wird die Anzahl im DataIdentNode mitgefuehrt.
PersistenceException
long getContainerSize() throws PersistenceException
accessContainer()
im Zugriff befindlichen Containers.
PersistenceException
public static int getHeaderLen()
accessContainer()
im Zugriff befindlichen Containers.
PersistenceException
public static int getTotalDataOverhead()
void deleteContainerData() throws PersistenceException
createDataIndexBuffer()
) in den Body des Datencontainers, damit Datensaetze aus geloeschten Containern beim Nachfordern
ignoriert werden koennen.
PersistenceException
byte[] createDataIndexBuffer() throws PersistenceException
PersistenceException
private static boolean isGap(long start, long end)
start
- end
-
private static long noModBits(long dataIndex)
ContainerDataIterator iterGetDataIterator(boolean considerDel) throws PersistenceException
atg
- Attributgruppe fuer das Deserialisieren der Datensaetze. Kann null sein, falls die Datensaetze nur uebersprungen werden sollen.
Vorsicht: Der ContainerDataIterator verwendet den Lesepuffer der Klasse ContainerFile
. Andere Leseoperationen koennen den
Lesepuffer ueberschreiben, so dass der ContainerDataIterator nicht mehr funktioniert.considerDeleted
- Gibt an, ob ausgelagerte Container besonders behandelt werden sollen.
PersistenceException
ContainerDataIterator iterGetHeaderIterator() throws PersistenceException
PersistenceException
public void setListOfIndexesDeleted(RandomAccessFile raf) throws IOException
raf
-
IOException
public ArrayList<Long> getListOfIndexesDeleted()
ContainerDataIterator iterGetDataIterator() throws PersistenceException
atg
- Attributgruppe fuer das Deserialisieren der Datensaetze. Kann null sein, falls die Datensaetze nur uebersprungen werden sollen.
Vorsicht: Der ContainerDataIterator verwendet den Lesepuffer der Klasse ContainerFile
. Andere Leseoperationen koennen den Lesepuffer
ueberschreiben, so dass der ContainerDataIterator nicht mehr funktioniert.
PersistenceException
boolean iterReadNextDataHdr() throws PersistenceException
PersistenceException
private void iterLoadDataChunk(long stepBack) throws PersistenceException
stepBack
- Zahl der Bytes, um die von der momentanen Position des Dateizeigers zurueckgesprungen wird.
PersistenceException
private void iterLoadExtraBuffer(long stepBack, byte[] extraBuffer) throws PersistenceException
stepBack
- Zahl der Bytes, um die von der momentanen Position des Dateizeigers zurueckgesprungen wird.extraBuffer
- Extra-Puffer
PersistenceException
void iterSkipData() throws PersistenceException
PersistenceException
boolean iterStillCompressed()
#iterGetRawData()
nocj komprimiert ist. Wenn DECOMPRESS_QUERY_RESULTS
gesetzt ist, werden aus
Performancegruenden die Ergebnisdaten bereits im Archivsystem dekomprimiert (das Stream-Interface der Kernsoftware ist etwas langsam).byte[] iterGetRawData(Inflater decompresser) throws PersistenceException
PersistenceException
void iterClose() throws PersistenceException
PersistenceException
private void checkContainerAccessed() throws PersistenceException
PersistenceException
falls nicht.
PersistenceException
private void checkContainerAccessedRW() throws PersistenceException
PersistenceException
falls nicht.
PersistenceException
private void checkContainerAccessedHeaderRead() throws PersistenceException
PersistenceException
falls nicht.
PersistenceException
private static byte[] getBuf(byte[] defaultBuffer, int desiredSize)
defaultBuffer
- Vorhandener PufferdesiredSize
- Gewuenschte Puffergroesse
private void closeRandomAccessFile(RandomAccessFile raf) throws PersistenceException
raf
- Zu schliessendes RandomAccessFile
PersistenceException
long getContainerId()
File getContFile()
long getObjId()
long getAtgId()
long getAspId()
int getSv()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |