private class ArchiveQueryTask.Query
extends java.lang.Object
Klasse, die eine einzelne Unterabfrage (ArchiveDataSpecification
) aus der Archivanfrage und die zugehoerigen Daten für die Archivantwort kapselt.
Modifier and Type | Field and Description |
---|---|
private ArchiveDataSpecification |
arcDataSpec
Die Archivanfrage.
|
private java.util.Map<ArchiveDataKind,ArchiveQueryTask.ContWalk> |
contWalks
Map mit Container-Walks für die einzelnen Datensatzarten.
|
private boolean |
done
Flag, ob Anfrage bereits erledigt ist.
|
private java.lang.Boolean |
firstDataFromDeletedCont
Flag, ob der Anfangszustand aus einem geloeschten COntainer stammt.
|
private boolean |
firstDataSent
Flag, ob der Kennzeichen-Datensatz am Anfang der Antwort bereits versandt worden ist.
|
private boolean |
hasMatchingData
Flag, ob es zur angefragten Datenidentifikation ueberhaupt irgendwelche Daten im ArS gibt.
|
private ArchiveQueryTask.Container |
lastContainer
Hier wird der Container vermerkt, aus dem der zuletzt gelieferte Ergebnisdatensatz stammt.
|
private ArchiveQueryTask.SimpleArchiveData |
lastDataForDelta
Enthaelt den letzten Datensatz einer aktuellen Datensatzart für den Deltavergleich.
|
private int |
maxInterval
Gibt Maximum für die Anzahl von Datensätzen an, die mit einer Relativanfrage zu bekommen sind.
|
private ArchiveOrder |
order |
private int |
qIdx
Index dieser Query; entspricht dem Index des zugeordneten Streams.
|
private boolean |
rephrased |
private boolean |
requestedIntervalError
Flag zeigt an, ob der Beginnzeitpunkt der Unterabfrage zeitlich hinter dem Endzeitpunkt liegt.
|
private java.util.Map<ArchiveDataKind,ArchiveQueryTask.SimpleArchiveData> |
resultData
Map mit den naechsten ErgebnisDatensätzen der einzelnen Datensatzarten.
|
private ArchiveTimeSpecification |
timeSpec
Der Zeit-/Indexbereich der Archivanfrage.
|
Modifier | Constructor and Description |
---|---|
private |
Query(ArchiveDataSpecification ads,
int qIdx,
boolean requestedIntervalError)
Erzeugt eine neue Query mit dem angegebenen Index zur Bearbeitung der angegebenen Unterabfrage.
|
Modifier and Type | Method and Description |
---|---|
private void |
abort()
Bricht die Query ab und markiert sie als erledigt.
|
private boolean |
accessContainer(ArchiveQueryTask.ContWalk contWalk)
Oeffnet im angegebenen Container-Walk alle Container innerhalb des aktuellen Container-Walk-Indexes zum Lesen.
|
private boolean |
beforeLowerBound(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der angegebene Datensatz vor der unteren Grenze des gesuchten Intervalls liegt.
|
private boolean |
beforeUpperBound(ArchiveQueryTask.Container contInfo)
Liefert Flag, ob der angegebene Datensatz vor der oberen Grenze des gesuchten Intervalls liegt.
|
private boolean |
containSameData(ArchiveQueryTask.SimpleArchiveData arcData1,
ArchiveQueryTask.SimpleArchiveData arcData2)
Vergleicht die beiden angegebenen Ergebnis-Datensätze auf Gleichheit der Nutzdaten für die Deltaantwort.
|
long |
getAbsoluteMin(ArchiveQueryTask.Info[] infos)
Berechnet den Minimalstempel aller übergebenen Container-Infos
|
long |
getAbsoluteMin(ArchiveQueryTask.Info[] oaInfos,
ArchiveQueryTask.Info[] onInfos,
ArchiveQueryTask.Info[] naInfos,
ArchiveQueryTask.Info[] nnInfos)
Berechnet den Minimalstempel aller übergebenen Container-Infos
|
private long[] |
getAllTillMin(int i,
long minThisSpec,
ArchiveQueryTask.Info[] infos,
long end)
Anzahl der Datensätze bis zum gegebenen Minimalindex aus den entsprechenden Containern einer Datenart (spezifiziert durch Info[]) lesen und den Zähler inkrementieren
|
private ArchiveQueryTask.Container[] |
getContainer(DataIdentNode din,
TimingType timingType,
ArchiveDataKind dataKind,
java.lang.String path,
long minKey,
long maxKey)
Erstellt ein Array mit den Container-Infos der Ergebnis-Datencontainer anhand der Container-IDs aus den Indexen passend zu den angegebenen Parametern.
|
private int |
getContainerFileIdx(ArchiveDataKind dataKind,
int contInfoIdx)
Wenn ein Container geoeffnet werden soll, muss der Persistenz ein Index uebergeben werden, mit dem sie mehrere geoffnete Container (ContainerFiles) eines Tasks unterscheiden kann.
|
private ArchiveQueryTask.SimpleArchiveData |
getEndData()
Erstellt und liefert den Ende-Kennzeichen-Datensatz zur Markierung des Endes der Archivantwort [TArS-39].
|
private ArchiveQueryTask.SimpleArchiveData |
getFirstData()
Wertet die Anfangszustaende (erster Ergebnisdatensatz) der einzelnen Datensatzarten aus und ermittelt den ersten zu sendenden Datensatz.
|
private ArchiveQueryTask.Info[] |
getInfo(java.io.File[] containers)
Infos zu Containern aus den zugehörigen Files auslesen
|
ArchiveQueryTask.Info |
getInfoCurrent(java.io.File container)
Infos zum spezifizierten Container auslesen
|
private long |
getMax(ArchiveQueryTask.Info info) |
private long |
getMin(ArchiveQueryTask.Info info)
Minimalwert der Zeit / Index der Daten im Container, der durch Info spezifiziert ist.
|
private long |
getMin(long minThisSpec,
ArchiveQueryTask.Info info)
Minimalwert der Zeit / Index der Daten im Container, der durch Info spezifiziert ist (Zeit / Index wird nur angepasst, wenn der im TimingType spezifizierte Wert tatsächlich kleiner ist, als der, der mit minThisSpec übergeben wird)
|
private ArchiveQueryTask.SimpleArchiveData |
getNextData()
Liefert den naechsten Ergebnis-Datensatz der Unterabfrage zurueck.
|
private ArchiveQueryTask.SimpleArchiveData |
getNextData(ArchiveQueryTask.ContWalk contWalk)
Liefert den naechsten Ergebnis-Datensatz des angegebenen Container-Walks.
|
private long[] |
guessStartEnd(int anzahl)
Startwert für Relativanfrage raten, nebenbei fällt der Wert des Intervallendes, sowie das der minimale jemals archivierte Wert (bzgl.
|
private java.lang.String |
ident()
Liefert einen Namen zur Identifikation dieser Unterabfrage.
|
private void |
leaveContainer(ArchiveQueryTask.Container contInfo)
Verlaesst den durch die Container-Info spezifizierten Container und markiert ihn als erledigt.
|
private void |
leaveContainer(ArchiveQueryTask.ContWalk contWalk,
int contWalkIdx)
Verlaesst im angegebenen Container-Walk alle Container innerhalb des angegebenen Container-Walk-Indexes.
|
private boolean |
matchesLowerBound(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der angegebene Datensatz genau auf der unteren Grenze des gesuchten Intervalls liegt.
|
private boolean |
matchesLowerBoundSearchDirectly(ArchiveQueryTask.Container contInfo)
Ermittelt, ob der aktuell im ContainerDataIterator der angegebenen ContInfo befindliche Datensatz die Suchkriterien der Query bezüglich der unteren Intervallgrenze direkt erfuellt.
|
private boolean |
matchesSearchDirectly(ArchiveQueryTask.Container contInfo)
Liefert Flag, ob der aktuell im ContainerDataIterator der angegebenen ContInfo befindliche Datensatz die Suchkriterien der Query direkt erfuellt.
|
private boolean |
matchesSearchDirectly(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der uebergebene Datensatz die Suchkriterien der Query direkt erfuellt.
|
private boolean |
matchesUpperBound(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der angegebene Datensatz genau auf der oberen Grenze des gesuchten Intervalls liegt.
|
private ArchiveQueryTask.SimpleArchiveData |
mixNextData()
Liefert den naechsten zu sendenden Datensatz, wobei dieser aus den naechsten zu sendenden Datensätzen der verschiedenen Datensatzarten ausgewaehlt wird (“Mischen”) [TArS-44].
|
private void |
rephraseQuery()
Für Relativanfragen müssen von einem Endezeitpunkt an X vorherige Datensätze geliefert werden.
|
private java.io.File[] |
sortContainersById(java.io.File[] files)
Sortiert ein Array von ContainerFiles nach ihrer ID (absteigend)
|
private ArchiveDataSpecification arcDataSpec
Die Archivanfrage.
private ArchiveTimeSpecification timeSpec
Der Zeit-/Indexbereich der Archivanfrage.
private ArchiveOrder order
private int qIdx
Index dieser Query; entspricht dem Index des zugeordneten Streams.
private boolean requestedIntervalError
Flag zeigt an, ob der Beginnzeitpunkt der Unterabfrage zeitlich hinter dem Endzeitpunkt liegt.
private boolean hasMatchingData
Flag, ob es zur angefragten Datenidentifikation ueberhaupt irgendwelche Daten im ArS gibt.
private java.util.Map<ArchiveDataKind,ArchiveQueryTask.ContWalk> contWalks
Map mit Container-Walks für die einzelnen Datensatzarten.
private java.util.Map<ArchiveDataKind,ArchiveQueryTask.SimpleArchiveData> resultData
Map mit den naechsten ErgebnisDatensätzen der einzelnen Datensatzarten.
private boolean firstDataSent
Flag, ob der Kennzeichen-Datensatz am Anfang der Antwort bereits versandt worden ist.
private java.lang.Boolean firstDataFromDeletedCont
Flag, ob der Anfangszustand aus einem geloeschten COntainer stammt. In diesem Fall gilt Sonderfall TAnfArS 5.1.2.10.2.3.1
private boolean done
Flag, ob Anfrage bereits erledigt ist. Dies bedeutet, es sind alle Ergebnis-Datensätze und der Kennzeichen-Datensatz am Ende der Antwort versandt worden.
private ArchiveQueryTask.Container lastContainer
Hier wird der Container vermerkt, aus dem der zuletzt gelieferte Ergebnisdatensatz stammt. Mit Hilfe dieser Information kann der Kennzeichen-Datensatz am Ende der Antwort versandt werden.
private ArchiveQueryTask.SimpleArchiveData lastDataForDelta
Enthaelt den letzten Datensatz einer aktuellen Datensatzart für den Deltavergleich. War der letzte versandte Datensatz ein nachgelieferter, ist hier null
enthalten.
private int maxInterval
Gibt Maximum für die Anzahl von Datensätzen an, die mit einer Relativanfrage zu bekommen sind.
private boolean rephrased
private Query(ArchiveDataSpecification ads, int qIdx, boolean requestedIntervalError) throws PersistenceException, IndexException
Erzeugt eine neue Query mit dem angegebenen Index zur Bearbeitung der angegebenen Unterabfrage.
ads
- Unterabfrage, die diese Query bearbeitetqIdx
- Index der Query; entspricht dem Index des zugeordneten Streams.requestedIntervalError
- Zeigt an, ob die Grenzen des Abfrage-Intervalls vertauscht sindIndexException
PersistenceException
private java.lang.String ident()
Liefert einen Namen zur Identifikation dieser Unterabfrage.
private ArchiveQueryTask.SimpleArchiveData getNextData()
Liefert den naechsten Ergebnis-Datensatz der Unterabfrage zurueck. Dabei werden die ErgebnisDatensätze der verschiedenen Datensatzarten gemischt. [TArs-44] Pro angefragter Datensatzart existiert ein Container-Walk mit Ergebnis-Containern.
null
falls keiner mehr zu liefern ist.private ArchiveQueryTask.SimpleArchiveData getFirstData()
Wertet die Anfangszustaende (erster Ergebnisdatensatz) der einzelnen Datensatzarten aus und ermittelt den ersten zu sendenden Datensatz. Dabei werden evtl. nicht benoetigte Datensätze eliminiert. [TArS-44]
private ArchiveQueryTask.SimpleArchiveData mixNextData()
Liefert den naechsten zu sendenden Datensatz, wobei dieser aus den naechsten zu sendenden Datensätzen der verschiedenen Datensatzarten ausgewaehlt wird (“Mischen”) [TArS-44]. Diese stehen in resultData zur Verfuegung, das aus den einzelnen Container-Walks befuellt wird.
null
falls keiner mehr zu liefern istprivate ArchiveQueryTask.SimpleArchiveData getNextData(ArchiveQueryTask.ContWalk contWalk)
Liefert den naechsten Ergebnis-Datensatz des angegebenen Container-Walks.
contWalk
- Container-Walknull
falls keiner mehr zu liefern.private ArchiveQueryTask.SimpleArchiveData getEndData()
Erstellt und liefert den Ende-Kennzeichen-Datensatz zur Markierung des Endes der Archivantwort [TArS-39].
private boolean matchesSearchDirectly(ArchiveQueryTask.Container contInfo)
Liefert Flag, ob der aktuell im ContainerDataIterator der angegebenen ContInfo befindliche Datensatz die Suchkriterien der Query direkt erfuellt.
Dies hat nichts damit zu tun, ob ein Datensatz Teil der Antwort ist.
contInfo
- Container-Infoprivate boolean matchesLowerBoundSearchDirectly(ArchiveQueryTask.Container contInfo)
Ermittelt, ob der aktuell im ContainerDataIterator der angegebenen ContInfo befindliche Datensatz die Suchkriterien der Query bezüglich der unteren Intervallgrenze direkt erfuellt.
Dies hat nichts damit zu tun, ob ein Datensatz Teil der Antwort ist.
contInfo
- Container-Infotrue
, falls der aktuelle Datensatz auf oder nach der unteren Intervallgrenze liegt.private boolean matchesSearchDirectly(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der uebergebene Datensatz die Suchkriterien der Query direkt erfuellt. Wird verwendet, um vor dem Versenden den Sonderfall TAnfArS 5.1.2.10.2.3.1 anzupruefen.
Dies hat nichts damit zu tun, ob ein Datensatz Teil der Antwort ist.
sad
- Datensatzprivate boolean matchesUpperBound(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der angegebene Datensatz genau auf der oberen Grenze des gesuchten Intervalls liegt.
sad
- Archivdatensatzprivate boolean matchesLowerBound(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der angegebene Datensatz genau auf der unteren Grenze des gesuchten Intervalls liegt.
sad
- Archivdatensatzprivate boolean beforeLowerBound(ArchiveQueryTask.SimpleArchiveData sad)
Liefert Flag, ob der angegebene Datensatz vor der unteren Grenze des gesuchten Intervalls liegt.
sad
- Archivdatensatzprivate boolean beforeUpperBound(ArchiveQueryTask.Container contInfo)
Liefert Flag, ob der angegebene Datensatz vor der oberen Grenze des gesuchten Intervalls liegt.
contInfo
- Informationen zu einem Ergebnis-Datencontainerprivate boolean accessContainer(ArchiveQueryTask.ContWalk contWalk)
Oeffnet im angegebenen Container-Walk alle Container innerhalb des aktuellen Container-Walk-Indexes zum Lesen. Der ContainerDataIterator wird in jedem Container bereits auf den ersten Datensatz positioniert.
contWalk
- Container-Walktrue
falls Container zum Lesen geoeffnet werden koennen, false
sonstprivate void abort()
Bricht die Query ab und markiert sie als erledigt. Noch geoeffnete Container werden geschlossen.
private void leaveContainer(ArchiveQueryTask.ContWalk contWalk, int contWalkIdx)
Verlaesst im angegebenen Container-Walk alle Container innerhalb des angegebenen Container-Walk-Indexes.
contWalk
- Container-WalkcontWalkIdx
- Container-Walk-Indexprivate void leaveContainer(ArchiveQueryTask.Container contInfo)
Verlaesst den durch die Container-Info spezifizierten Container und markiert ihn als erledigt.
contInfo
- Zu verlassender Containerprivate ArchiveQueryTask.Container[] getContainer(DataIdentNode din, TimingType timingType, ArchiveDataKind dataKind, java.lang.String path, long minKey, long maxKey)
Erstellt ein Array mit den Container-Infos der Ergebnis-Datencontainer anhand der Container-IDs aus den Indexen passend zu den angegebenen Parametern.
din
- DataIdentNode zur angefragten DatenidentifikationtimingType
- Archivzeit, Datenzeit oder DatenindexdataKind
- Datensatzartpath
- Pfad zum ContainerverzeichnisminKey
- Untere Grenze des BereichsmaxKey
- Obere Grenze des Bereichsprivate int getContainerFileIdx(ArchiveDataKind dataKind, int contInfoIdx)
Wenn ein Container geoeffnet werden soll, muss der Persistenz ein Index uebergeben werden, mit dem sie mehrere geoffnete Container (ContainerFiles) eines Tasks unterscheiden kann. In jeder Query muessen pro Container-Walk jeweils die innerhalb eines ContainerWalk-Indexes liegenden Container gleichzeitig geoeffnet werden. Daher wird der Index der ContainerInfo innerhalb des aktuellen ContainerWalk-Indexes herangezogen, um den Index für die Persistenz zu bilden. Desweitern wird die Datensatzart verwandt, da sie den Container-Walk dieser Datensatzart adressiert, sowie der Index der Query selber, um sie von den anderen Queries zu unterscheiden.
dataKind
- Datensatzart zur Adressierung des Container-Walks dieser DatensatzartcontInfoIdx
- Index der Container-Info des zu oeffnenden Containers innerhalb des aktuellen ContainerWalk-Indexesprivate boolean containSameData(ArchiveQueryTask.SimpleArchiveData arcData1, ArchiveQueryTask.SimpleArchiveData arcData2)
Vergleicht die beiden angegebenen Ergebnis-Datensätze auf Gleichheit der Nutzdaten für die Deltaantwort.
arcData1
- Erster DatensatzarcData2
- Zweiter Datensatzprivate java.io.File[] sortContainersById(java.io.File[] files)
Sortiert ein Array von ContainerFiles nach ihrer ID (absteigend)
files
- public long getAbsoluteMin(ArchiveQueryTask.Info[] oaInfos, ArchiveQueryTask.Info[] onInfos, ArchiveQueryTask.Info[] naInfos, ArchiveQueryTask.Info[] nnInfos)
Berechnet den Minimalstempel aller übergebenen Container-Infos
oaInfos
- onInfos
- naInfos
- nnInfos
- public long getAbsoluteMin(ArchiveQueryTask.Info[] infos)
Berechnet den Minimalstempel aller übergebenen Container-Infos
infos
- private long[] guessStartEnd(int anzahl)
Startwert für Relativanfrage raten, nebenbei fällt der Wert des Intervallendes, sowie das der minimale jemals archivierte Wert (bzgl. TT) ab
anzahl
- Anzahl der gewünschten Datensätzeprivate long[] getAllTillMin(int i, long minThisSpec, ArchiveQueryTask.Info[] infos, long end)
Anzahl der Datensätze bis zum gegebenen Minimalindex aus den entsprechenden Containern einer Datenart (spezifiziert durch Info[]) lesen und den Zähler inkrementieren
i
- Zähler-Startwert (Container sind absteigend sortiert)minThisSpec
- bisheriger Minimalwert der Zeit / Index (abhängig vom TimingType)infos
- Infos zu Containern einer Datenart zur DIDprivate void rephraseQuery()
Für Relativanfragen müssen von einem Endezeitpunkt an X vorherige Datensätze geliefert werden. Da Datensätze in chronologischer Reihenfolge ausgegeben werden müssen und das Archivsystem von-bis Anfragen performant beantwortet, wird hier die ursprüngliche Anfrage umgeschrieben. Es wird eine neue Anfrage erstellt, so dass von und bis genau X Antworten liefern.
private long getMin(long minThisSpec, ArchiveQueryTask.Info info)
Minimalwert der Zeit / Index der Daten im Container, der durch Info spezifiziert ist (Zeit / Index wird nur angepasst, wenn der im TimingType spezifizierte Wert tatsächlich kleiner ist, als der, der mit minThisSpec übergeben wird)
minThisSpec
- info
- private long getMin(ArchiveQueryTask.Info info)
Minimalwert der Zeit / Index der Daten im Container, der durch Info spezifiziert ist.
info
- private long getMax(ArchiveQueryTask.Info info)
private ArchiveQueryTask.Info[] getInfo(java.io.File[] containers)
Infos zu Containern aus den zugehörigen Files auslesen
containers
- public ArchiveQueryTask.Info getInfoCurrent(java.io.File container)
Infos zum spezifizierten Container auslesen
container
-