public class CacheManager
extends java.lang.Object
Diese Klasse implementiert die Verwaltung der Caches für die Schreibzugriffe auf Containerdateien. Die Klasse ist als Singleton realisiert, weil es im Original-Archivsystem keine zentrale Stelle zum Zugriff auf Container-Dateien gibt (der PersistenzManager war wohl dafür vorgesehen, allerdings gibt es auch einige Zugriffe auf Containerdateien, die am PersistenzManager vorbei gehen). Vor dem Zugriff auf Containerdateien muss die Cache-Verwaltung mit der Methode init()
erzeugt und initialisiert werden. Beim Beenden des Archivsystems muss mit einem Aufruf der Methode close
das Schreiben der noch in den einzelnen Caches vorhandenen Daten veranlasst werden.
Modifier and Type | Class and Description |
---|---|
static class |
CacheManager.Cache
Realisiert den Zwischenspeicher für eine Containerdatei.
|
Modifier and Type | Field and Description |
---|---|
private long |
_bufferedCountSum
Gesamtanzahl von zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
|
private boolean |
_cacheEnabled |
private static CacheManager |
_cacheManager
Singleton Objekt des CacheManagers.
|
private java.util.HashMap<java.lang.Long,CacheManager.Cache> |
_containerId2Cache
Hashmap zur Zuordnung einer Container-ID zum zugehörigen Cache-Objekt.
|
private Debug |
_debug
Debug-Logger für Debug-Ausgaben.
|
private int |
_defaultBufferSize
Beim Anlegen der Cache-Objekte zu verwendende Puffergröße als Anzahl Bytes.
|
private java.util.HashSet<IdDataIdentification> |
_disabledCacheIdentifications
Hashmap mit den Datenidentifikationen, die nicht gepuffert, sondern sofort persistiert werden.
|
private long |
_processedCountSum
Gesamtanzahl von verarbeiteten Datenblöcken aller geschlossenen Cache-Objekte.
|
private long |
_unbufferedCountSum
Gesamtanzahl von nicht zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
|
private long |
_writeCountSum
Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.
|
private long |
_writtenBytes
Anzahl der geschriebenen Bytes
|
private static boolean |
DEBUG_CALLS
Zum aktivieren/deaktivieren von Testausgaben.
|
private static int |
DEFAULT_BUFFER_SIZE
Standard-Puffergröße je Datenidentifikation als Anzahl Bytes.
|
private static int |
MAXIMUM_BUFFER_SIZE
Maximale Puffergröße je Datenidentifikation als Anzahl Bytes.
|
private static int |
MINIMUM_BUFFER_SIZE
Minimale Puffergröße je Datenidentifikation als Anzahl Bytes.
|
Modifier | Constructor and Description |
---|---|
private |
CacheManager()
Erzeugt eine neue Cacheverwaltung.
|
Modifier and Type | Method and Description |
---|---|
private void |
aggregateCounts(CacheManager.Cache cache)
Überträgt, die verschiedenen Ereigniszähler eines Cache-Objekts in die entsprechenden Summenzähler der Cache-Verwaltung.
|
void |
close()
Schreibt alle in den einzelnen Caches vorhandenen Daten und schließt die Cache-Verwaltung.
|
CacheManager.Cache |
createCache(ContainerFile cont,
boolean createFile)
Erzeugt einen neuen Cache für den angegebenen Container.
|
void |
flushAll()
Schreibt alle in den einzelnen Caches vorhandenen Daten.
|
void |
forgetCache(ContainerFile containerFile)
Entfernt den Cache des angegebenen Containers aus der Containerverwaltung.
|
void |
forgetCache(long containerId)
Entfernt den Cache des angegebenen Containers aus der Containerverwaltung.
|
(package private) long |
getBufferedCountSum() |
CacheManager.Cache |
getCache(ContainerFile containerFile)
Liefert den Cache für den angegebenen Container zurück.
|
long[] |
getCounts()
Liefert ein Array mit folgenden statistischen Informationen: Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.
|
static CacheManager |
getInstance() |
(package private) long |
getProcessedCountSum() |
(package private) long |
getUnbufferedCountSum() |
(package private) long |
getWriteCountSum() |
long |
getWrittenBytes() |
void |
init(ArgumentList argumentList)
Initialisiert den CacheManager.
|
boolean |
isCacheEnabled() |
void |
resetCounts()
Setzt die Statistiken zu den geschriebenen Puffern auf 0 zurück
|
void |
setCacheEnabled(boolean cacheEnabled) |
void |
setCachingEnabled(long objectId,
long atgId,
long aspectId,
int simulationVariant,
boolean enable)
Mit dieser Methode kann die Zwischenspeicherung für eine angegebene Datenidentifikation ein- bzw. ausgeschaltet werden.
|
void |
updateCounts()
Aktualisiert die Statistiken zu den geschriebenen Puffern
|
private static final int MINIMUM_BUFFER_SIZE
Minimale Puffergröße je Datenidentifikation als Anzahl Bytes.
private static final int DEFAULT_BUFFER_SIZE
Standard-Puffergröße je Datenidentifikation als Anzahl Bytes. Wird verwendet, wenn kein anderer Wert über das Aufrufargument cachePufferGröße=… angegeben wurde.
private static final int MAXIMUM_BUFFER_SIZE
Maximale Puffergröße je Datenidentifikation als Anzahl Bytes.
private static final boolean DEBUG_CALLS
Zum aktivieren/deaktivieren von Testausgaben.
private static CacheManager _cacheManager
Singleton Objekt des CacheManagers.
private java.util.HashMap<java.lang.Long,CacheManager.Cache> _containerId2Cache
Hashmap zur Zuordnung einer Container-ID zum zugehörigen Cache-Objekt.
private int _defaultBufferSize
Beim Anlegen der Cache-Objekte zu verwendende Puffergröße als Anzahl Bytes. Der Wert kann über das Aufrufargument -cachePufferGröße=… eingestellt werden.
private java.util.HashSet<IdDataIdentification> _disabledCacheIdentifications
Hashmap mit den Datenidentifikationen, die nicht gepuffert, sondern sofort persistiert werden. Die Hashmap wird von der Methode setCachingEnabled(long,long,long,int,boolean)
modifiziert und dient dazu, die Zwischenspeicherung von Datenidentifikationen, bei denen der Quittierungsmechanismus des Archivsystems verwendet wird, zu verhindern.
private Debug _debug
Debug-Logger für Debug-Ausgaben.
private long _writeCountSum
Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.
private long _processedCountSum
Gesamtanzahl von verarbeiteten Datenblöcken aller geschlossenen Cache-Objekte.
private long _bufferedCountSum
Gesamtanzahl von zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
private long _unbufferedCountSum
Gesamtanzahl von nicht zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
private long _writtenBytes
Anzahl der geschriebenen Bytes
private boolean _cacheEnabled
public static CacheManager getInstance()
public void init(ArgumentList argumentList)
Initialisiert den CacheManager. Das Aufrufargument -cachePufferGröße=…, mit dem die Größe des Puffers pro Cache eingestellt werden kann, wird gelesen.
argumentList
- Aufrufargumente der Applikationpublic void close()
Schreibt alle in den einzelnen Caches vorhandenen Daten und schließt die Cache-Verwaltung. Vor einer erneuten Verwendung muss die Cache-Verwaltung mit einem erneuten Aufruf der Methode init
initialisiert werden.
public void flushAll()
Schreibt alle in den einzelnen Caches vorhandenen Daten.
public void updateCounts()
Aktualisiert die Statistiken zu den geschriebenen Puffern
public void resetCounts()
Setzt die Statistiken zu den geschriebenen Puffern auf 0 zurück
public CacheManager.Cache getCache(ContainerFile containerFile)
Liefert den Cache für den angegebenen Container zurück.
containerFile
- Container, dessen Cache bestimmt werden sollnull
, wenn der Container keinen Cache hat.public CacheManager.Cache createCache(ContainerFile cont, boolean createFile)
Erzeugt einen neuen Cache für den angegebenen Container.
cont
- Container für den ein neuer Cache erzeugt werden soll.createFile
- true
, falls eine neue Datei erzeugt werden soll; false
, falls zu einer vorhandenen Datei hinzugefügt werden soll.null
, falls die Datenidentifikation des Containers nicht gecacht werden soll..public void forgetCache(ContainerFile containerFile)
Entfernt den Cache des angegebenen Containers aus der Containerverwaltung. Eventuell noch im Cache befindliche Daten werden nicht automatisch geschrieben, sondern müssen vorher durch einen expliziten Aufruf der Methode CacheManager.Cache.flush()
geschrieben werden.
containerFile
- Container dessen Cache aus der Verwaltung entfernt werden soll.public void forgetCache(long containerId)
Entfernt den Cache des angegebenen Containers aus der Containerverwaltung. Eventuell noch im Cache befindliche Daten werden nicht automatisch geschrieben, sondern müssen vorher durch einen expliziten Aufruf der Methode CacheManager.Cache.flush()
geschrieben werden.
containerId
- ID des Containers dessen Cache aus der Verwaltung entfernt werden soll.private void aggregateCounts(CacheManager.Cache cache)
Überträgt, die verschiedenen Ereigniszähler eines Cache-Objekts in die entsprechenden Summenzähler der Cache-Verwaltung.
cache
- Cache-Objekt, dessen Zählerstände übernommen werden sollen.public long[] getCounts()
Liefert ein Array mit folgenden statistischen Informationen:
Gesamtanzahl von Datei-Schreibvorgängen aller geschlossenen Cache-Objekte.
Gesamtanzahl von verarbeiteten Datenblöcken aller geschlossenen Cache-Objekte.
Gesamtanzahl von zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
Gesamtanzahl von nicht zwischengespeicherten Datenblöcken aller geschlossenen Cache-Objekte.
public void setCachingEnabled(long objectId, long atgId, long aspectId, int simulationVariant, boolean enable)
Mit dieser Methode kann die Zwischenspeicherung für eine angegebene Datenidentifikation ein- bzw. ausgeschaltet werden.
objectId
- Objekt-ID der Datenidentifikation.atgId
- ID der Attribugruppe der Datenidentifikation.aspectId
- ID des Aspekts der Datenidentifikation.simulationVariant
- Simulationsvariante der Datenidentifikation.enable
- true
, wenn die Zwischenspeicherung eingeschaltetwerden soll; false
, wenn die Zwischenspeicherung ausgeschaltet werden soll.public boolean isCacheEnabled()
public void setCacheEnabled(boolean cacheEnabled)
long getWriteCountSum()
long getProcessedCountSum()
long getBufferedCountSum()
long getUnbufferedCountSum()
public long getWrittenBytes()