?? logsystem.java
字號:
return ((LogFile) a).getId() - ((LogFile) b).getId();
}
});
if (activeLogs.size() == 0) {
LogFile l = new LogFile(this, 0, fileNamePrefix);
activeLogs.add(l);
}
currentLog = (LogFile) activeLogs.get(activeLogs.size() - 1);
closed = false;
}
Storage getStorageForRecovery(int id) throws SQLException {
boolean dataFile;
if (id < 0) {
dataFile = false;
id = -id;
} else {
dataFile = true;
}
Integer i = ObjectUtils.getInteger(id);
Storage storage = (Storage) storages.get(i);
if (storage == null) {
storage = database.getStorage(null, id, dataFile);
storages.put(i, storage);
}
return storage;
}
boolean isSessionCommitted(int sessionId, int logId, int pos) {
Integer key = ObjectUtils.getInteger(sessionId);
SessionState state = (SessionState) sessions.get(key);
if (state == null) {
return true;
}
return state.isCommitted(logId, pos);
}
void setLastCommitForSession(int sessionId, int logId, int pos) {
SessionState state = getOrAddSessionState(sessionId);
state.lastCommitLog = logId;
state.lastCommitPos = pos;
state.inDoubtTransaction = null;
}
SessionState getOrAddSessionState(int sessionId) {
Integer key = ObjectUtils.getInteger(sessionId);
SessionState state = (SessionState) sessions.get(key);
if (state == null) {
state = new SessionState();
sessions.put(key, state);
state.sessionId = sessionId;
}
return state;
}
void setPreparedCommitForSession(LogFile log, int sessionId, int pos, String transaction, int blocks) {
SessionState state = getOrAddSessionState(sessionId);
// this is potentially a commit, so
// don't roll back the action before it (currently)
setLastCommitForSession(sessionId, log.getId(), pos);
state.inDoubtTransaction = new InDoubtTransaction(log, sessionId, pos, transaction, blocks);
}
public ObjectArray getInDoubtTransactions() {
return inDoubtTransactions;
}
void removeSession(int sessionId) {
sessions.remove(ObjectUtils.getInteger(sessionId));
}
public void prepareCommit(Session session, String transaction) throws SQLException {
if (database == null || readOnly) {
return;
}
synchronized (database) {
if (closed) {
return;
}
currentLog.prepareCommit(session, transaction);
}
}
public void commit(Session session) throws SQLException {
if (database == null || readOnly) {
return;
}
synchronized (database) {
if (closed) {
return;
}
currentLog.commit(session);
session.setAllCommitted();
}
}
public void flush() throws SQLException {
if (database == null || readOnly) {
return;
}
synchronized (database) {
if (closed) {
return;
}
currentLog.flush();
}
}
/**
* Add a truncate entry.
*
* @param session the session
* @param file the disk file
* @param storageId the storage id
* @param recordId the id of the first record
* @param blockCount the number of blocks
*/
public void addTruncate(Session session, DiskFile file, int storageId, int recordId, int blockCount)
throws SQLException {
if (database == null) {
return;
}
synchronized (database) {
if (disabled || closed) {
return;
}
database.checkWritingAllowed();
if (!file.isDataFile()) {
storageId = -storageId;
}
currentLog.addTruncate(session, storageId, recordId, blockCount);
if (currentLog.getFileSize() > maxLogSize) {
checkpoint();
}
}
}
public void add(Session session, DiskFile file, Record record) throws SQLException {
if (database == null) {
return;
}
synchronized (database) {
if (disabled || closed) {
return;
}
database.checkWritingAllowed();
int storageId = record.getStorageId();
if (!file.isDataFile()) {
storageId = -storageId;
}
int log = currentLog.getId();
int pos = currentLog.getPos();
session.addLogPos(log, pos);
record.setLastLog(log, pos);
currentLog.add(session, storageId, record);
if (currentLog.getFileSize() > maxLogSize) {
checkpoint();
}
}
}
public void checkpoint() throws SQLException {
if (readOnly || database == null) {
return;
}
synchronized (database) {
if (closed || disabled) {
return;
}
flushAndCloseUnused();
currentLog = new LogFile(this, currentLog.getId() + 1, fileNamePrefix);
activeLogs.add(currentLog);
writeSummary();
currentLog.flush();
}
}
public ObjectArray getActiveLogFiles() {
synchronized (database) {
ObjectArray list = new ObjectArray();
list.addAll(activeLogs);
return list;
}
}
private void writeSummary() throws SQLException {
byte[] summary;
DiskFile file;
file = database.getDataFile();
if (file == null) {
return;
}
summary = file.getSummary();
if (summary != null) {
currentLog.addSummary(true, summary);
}
if (database.getLogIndexChanges() || database.getIndexSummaryValid()) {
file = database.getIndexFile();
summary = file.getSummary();
if (summary != null) {
currentLog.addSummary(false, summary);
}
} else {
// invalidate the index summary
currentLog.addSummary(false, null);
}
}
Database getDatabase() {
return database;
}
DataPage getRowBuffer() {
return rowBuff;
}
public void setFlushOnEachCommit(boolean b) {
flushOnEachCommit = b;
}
boolean getFlushOnEachCommit() {
return flushOnEachCommit;
}
public void sync() throws SQLException {
if (database == null || readOnly) {
return;
}
synchronized (database) {
if (currentLog != null) {
currentLog.flush();
currentLog.sync();
}
}
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
void addRedoLog(Storage storage, int recordId, int blockCount, DataPage rec) throws SQLException {
DiskFile file = storage.getDiskFile();
file.addRedoLog(storage, recordId, blockCount, rec);
}
public void invalidateIndexSummary() throws SQLException {
currentLog.addSummary(false, null);
}
public synchronized void updateKeepFiles(int incrementDecrement) {
keepFiles += incrementDecrement;
}
String getAccessMode() {
return accessMode;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -