亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? logsystem.java

?? 非常棒的java數(shù)據(jù)庫
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.log;

import java.sql.SQLException;
import java.util.Comparator;
import java.util.HashMap;

import org.h2.api.DatabaseEventListener;
import org.h2.engine.Constants;
import org.h2.engine.Database;
import org.h2.engine.Session;
import org.h2.message.Trace;
import org.h2.store.DataPage;
import org.h2.store.DiskFile;
import org.h2.store.Record;
import org.h2.store.Storage;
import org.h2.util.FileUtils;
import org.h2.util.ObjectArray;
import org.h2.util.ObjectUtils;

/**
 * The transaction log system is responsible for the write ahead log mechanism
 * used in this database. A number of {@link LogFile} objects are used (one for
 * each file).
 */
public class LogSystem {

    public static final int LOG_WRITTEN = -1;

    private Database database;
    private ObjectArray activeLogs;
    private LogFile currentLog;
    private String fileNamePrefix;
    private HashMap storages = new HashMap();
    private HashMap sessions = new HashMap();
    private DataPage rowBuff;
    private ObjectArray undo;
    // TODO log file / deleteOldLogFilesAutomatically: 
    // make this a setting, so they can be backed up
    private boolean deleteOldLogFilesAutomatically = true;
    private long maxLogSize = Constants.DEFAULT_MAX_LOG_SIZE;
    private boolean readOnly;
    private boolean flushOnEachCommit;
    private ObjectArray inDoubtTransactions;
    private boolean disabled;
    private int keepFiles;
    private boolean closed;
    private String accessMode;

    public LogSystem(Database database, String fileNamePrefix, boolean readOnly, String accessMode) throws SQLException {
        this.database = database;
        this.readOnly = readOnly;
        this.accessMode = accessMode;
        closed = true;
        if (database == null) {
            return;
        }
        this.fileNamePrefix = fileNamePrefix;
        rowBuff = DataPage.create(database, Constants.DEFAULT_DATA_PAGE_SIZE);
    }

    public void setMaxLogSize(long maxSize) {
        this.maxLogSize = maxSize;
    }

    public long getMaxLogSize() {
        return maxLogSize;
    }

    public boolean containsInDoubtTransactions() {
        return inDoubtTransactions != null && inDoubtTransactions.size() > 0;
    }

    private void flushAndCloseUnused() throws SQLException {
        currentLog.flush();
        DiskFile file = database.getDataFile();
        if (file == null) {
            return;
        }
        file.flush();
        if (containsInDoubtTransactions()) {
            // if there are any in-doubt transactions 
            // (even if they are resolved), can't update or delete the log files
            return;
        }
        Session[] sessions = database.getSessions();
        int firstUncommittedLog = currentLog.getId();
        int firstUncommittedPos = currentLog.getPos();
        for (int i = 0; i < sessions.length; i++) {
            Session session = sessions[i];
            int log = session.getFirstUncommittedLog();
            int pos = session.getFirstUncommittedPos();
            if (pos != LOG_WRITTEN) {
                if (log < firstUncommittedLog || (log == firstUncommittedLog && pos < firstUncommittedPos)) {
                    firstUncommittedLog = log;
                    firstUncommittedPos = pos;
                }
            }
        }
        for (int i = activeLogs.size() - 1; i >= 0; i--) {
            LogFile l = (LogFile) activeLogs.get(i);
            if (l.getId() < firstUncommittedLog) {
                l.setFirstUncommittedPos(LOG_WRITTEN);
            } else if (l.getId() == firstUncommittedLog) {
                if (firstUncommittedPos == l.getPos()) {
                    l.setFirstUncommittedPos(LOG_WRITTEN);
                } else {
                    l.setFirstUncommittedPos(firstUncommittedPos);
                }
            }
        }
        for (int i = 0; i < activeLogs.size(); i++) {
            LogFile l = (LogFile) activeLogs.get(i);
            if (l.getFirstUncommittedPos() == LOG_WRITTEN) {
                // must remove the log file first
                // if we don't do that, the file is closed but still in the list
                activeLogs.remove(i);
                i--;
                closeOldFile(l);
            }
        }
    }

    public void close() throws SQLException {
        if (database == null) {
            return;
        }
        synchronized (database) {
            if (closed) {
                return;
            }
            if (readOnly) {
                for (int i = 0; i < activeLogs.size(); i++) {
                    LogFile l = (LogFile) activeLogs.get(i);
                    l.close(false);
                }
                closed = true;
                return;
            }
            // TODO refactor flushing and closing files when we know what to do exactly
            SQLException closeException = null;
            try {
                flushAndCloseUnused();
                if (!containsInDoubtTransactions()) {
                    checkpoint();
                }
            } catch (SQLException e) {
                closeException = e;
            }
            for (int i = 0; i < activeLogs.size(); i++) {
                LogFile l = (LogFile) activeLogs.get(i);
                try {
                    // if there are any in-doubt transactions 
                    // (even if they are resolved), can't delete the log files
                    if (l.getFirstUncommittedPos() == LOG_WRITTEN && !containsInDoubtTransactions()) {
                        closeOldFile(l);
                    } else {
                        l.close(false);
                    }
                } catch (SQLException e) {
                    // TODO log exception
                    if (closeException == null) {
                        closeException = e;
                    }
                }
            }
            closed = true;
            if (closeException != null) {
                throw closeException;
            }
        }
    }

    void addUndoLogRecord(LogFile log, int logRecordId, int sessionId) {
        getOrAddSessionState(sessionId);
        LogRecord record = new LogRecord(log, logRecordId, sessionId);
        undo.add(record);
    }

    public boolean recover() throws SQLException {
        if (database == null) {
            return false;
        }
        synchronized (database) {
            if (closed) {
                return false;
            }
            undo = new ObjectArray();
            for (int i = 0; i < activeLogs.size(); i++) {
                LogFile log = (LogFile) activeLogs.get(i);
                log.redoAllGoEnd();
            }
            database.getDataFile().flushRedoLog();
            database.getIndexFile().flushRedoLog();
            int end = currentLog.getPos();
            Object[] states = sessions.values().toArray();
            inDoubtTransactions = new ObjectArray();
            for (int i = 0; i < states.length; i++) {
                SessionState state = (SessionState) states[i];
                if (state.inDoubtTransaction != null) {
                    inDoubtTransactions.add(state.inDoubtTransaction);
                }
            }
            for (int i = undo.size() - 1; i >= 0 && sessions.size() > 0; i--) {
                database.setProgress(DatabaseEventListener.STATE_RECOVER, null, undo.size() - 1 - i, undo.size());
                LogRecord record = (LogRecord) undo.get(i);
                if (sessions.get(ObjectUtils.getInteger(record.sessionId)) != null) {
                    // undo only if the session is not yet committed
                    record.log.undo(record.logRecordId);
                    database.getDataFile().flushRedoLog();
                    database.getIndexFile().flushRedoLog();
                }
            }
            currentLog.go(end);
            boolean fileChanged = undo.size() > 0;
            undo = null;
            storages.clear();
            if (!readOnly && fileChanged && !containsInDoubtTransactions()) {
                checkpoint();
            }
            return fileChanged;
        }
    }

    private void closeOldFile(LogFile l) throws SQLException {
        l.close(deleteOldLogFilesAutomatically && keepFiles == 0);
    }

    public void open() throws SQLException {
        String path = FileUtils.getParent(fileNamePrefix);
        String[] list = FileUtils.listFiles(path);
        activeLogs = new ObjectArray();
        for (int i = 0; i < list.length; i++) {
            String s = list[i];
            LogFile l = null;
            try {
                l = LogFile.openIfLogFile(this, fileNamePrefix, s);
            } catch (SQLException e) {
                database.getTrace(Trace.LOG).debug("Error opening log file, header corrupt: "+s, e);
                // this can happen if the system crashes just 
                // after creating a new file (before writing the header)
                // rename it, so that it doesn't get in the way the next time
                FileUtils.delete(s + ".corrupt");
                FileUtils.rename(s, s + ".corrupt");
            }
            if (l != null) {
                if (l.getPos() == LOG_WRITTEN) {
                    closeOldFile(l);
                } else {
                    activeLogs.add(l);
                }
            }
        }
        activeLogs.sort(new Comparator() {
            public int compare(Object a, Object b) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区在线播放| 日韩一区二区三区在线| 美女脱光内衣内裤视频久久网站| 国产精品免费网站在线观看| 欧美一级二级三级乱码| 欧美日韩在线不卡| 在线观看亚洲a| av成人免费在线| 成人网男人的天堂| 国产sm精品调教视频网站| 极品销魂美女一区二区三区| 美女视频黄a大片欧美| 免费成人av资源网| 国产不卡视频一区| 国内精品久久久久影院一蜜桃| 亚洲成人激情综合网| 一区二区三区在线免费观看 | 极品少妇一区二区| 日本美女一区二区三区| 天堂成人国产精品一区| 夜夜精品浪潮av一区二区三区| 欧美极品aⅴ影院| 国产亚洲成av人在线观看导航| 欧美tk丨vk视频| 久久久久久久久久久99999| 久久网这里都是精品| 国产亚洲欧美激情| 国产精品成人一区二区三区夜夜夜| 中文字幕乱码日本亚洲一区二区| 国产精品久久久久久一区二区三区| 国产精品久久免费看| 亚洲欧美另类久久久精品2019| 亚洲夂夂婷婷色拍ww47| 日本不卡视频在线| 国产成人在线视频免费播放| 成人国产精品免费观看动漫| 91在线高清观看| 欧美精品免费视频| 久久久久久久久久久久久女国产乱 | 日韩不卡免费视频| 捆绑调教美女网站视频一区| 国产精品自拍三区| 色琪琪一区二区三区亚洲区| 717成人午夜免费福利电影| 精品欧美乱码久久久久久| 久久精品欧美日韩| 一区二区三区精品视频| 秋霞电影网一区二区| 成人午夜激情在线| 欧美浪妇xxxx高跟鞋交| 国产欧美日韩亚州综合| 亚洲一区二区三区四区五区中文 | 国产精品区一区二区三区| 亚洲免费在线观看| 精品一二三四区| av在线一区二区| 91精品婷婷国产综合久久竹菊| 久久精品欧美日韩| 亚洲成av人片一区二区梦乃| 国产精品亚洲一区二区三区妖精 | 国产乱码精品一区二区三区忘忧草| 91视频一区二区三区| 日韩视频免费观看高清完整版在线观看| 国产日韩欧美一区二区三区乱码 | 国产精品996| 在线播放亚洲一区| 国产精品大尺度| 精品制服美女久久| 欧美巨大另类极品videosbest | 日韩精品一二区| 波多野结衣中文字幕一区 | 99久久精品国产精品久久| 91精品欧美久久久久久动漫 | 欧美系列亚洲系列| 中文字幕精品三区| 久久99久久久久| 欧美日本韩国一区二区三区视频| 国产精品卡一卡二| 精品系列免费在线观看| 欧美精品丝袜中出| 亚洲一线二线三线视频| 成年人午夜久久久| 久久久精品黄色| 麻豆91免费观看| 91精品欧美久久久久久动漫 | 不卡电影一区二区三区| 久久综合999| 99视频热这里只有精品免费| 久久精品亚洲麻豆av一区二区 | 麻豆精品久久精品色综合| 欧美在线啊v一区| 亚洲影院久久精品| 欧美三级三级三级| 亚洲v精品v日韩v欧美v专区| 91久久奴性调教| 综合亚洲深深色噜噜狠狠网站| 国产一区二区三区观看| 精品久久一区二区三区| 韩国av一区二区三区四区 | 91久久香蕉国产日韩欧美9色| 国产精品久久久久久久久快鸭| 国产成人午夜99999| 欧美高清在线精品一区| 99久久免费精品高清特色大片| 中文字幕日韩精品一区 | 亚洲欧美一区二区在线观看| 成人自拍视频在线| 亚洲欧洲精品一区二区三区不卡| 成人sese在线| 一区二区三区 在线观看视频| 91黄色小视频| 日韩二区在线观看| 精品国产凹凸成av人导航| 国产精品一区一区| 国产精品高潮呻吟久久| 91国产福利在线| 日韩主播视频在线| 欧美电影免费提供在线观看| 国产一区二区女| 国产精品久久久久久久久果冻传媒| av电影天堂一区二区在线| 亚洲尤物在线视频观看| 欧美www视频| www.色精品| 三级欧美韩日大片在线看| 精品伦理精品一区| 99久久综合色| 日日摸夜夜添夜夜添精品视频| 精品噜噜噜噜久久久久久久久试看 | 欧美日韩免费电影| 麻豆91在线播放| 亚洲欧美在线视频| 日韩精品一区二区三区视频| 成人av网在线| 麻豆专区一区二区三区四区五区| 欧美韩国日本不卡| 91精品欧美福利在线观看 | 91美女视频网站| 日韩和欧美一区二区三区| 国产午夜精品一区二区 | 国产麻豆91精品| 亚洲一级二级三级| 国产视频在线观看一区二区三区| 欧美中文一区二区三区| 国产乱妇无码大片在线观看| 亚洲香肠在线观看| 中文久久乱码一区二区| 日韩一区二区三区电影在线观看 | 欧美精品一区二区蜜臀亚洲| 91国模大尺度私拍在线视频| 国产精品小仙女| 日本最新不卡在线| 国产精品久久久爽爽爽麻豆色哟哟| 欧美精品三级日韩久久| 91捆绑美女网站| 成人免费高清在线观看| 激情av综合网| 首页综合国产亚洲丝袜| 一区二区成人在线视频| 国产精品网站在线观看| 精品国产青草久久久久福利| 欧美嫩在线观看| 欧美系列日韩一区| 91国偷自产一区二区三区观看| 从欧美一区二区三区| 国产做a爰片久久毛片 | 日韩毛片在线免费观看| 久久久久国产精品麻豆| 精品美女被调教视频大全网站| 7777精品伊人久久久大香线蕉| 欧美偷拍一区二区| 欧美亚日韩国产aⅴ精品中极品| av电影一区二区| 成人影视亚洲图片在线| 国产91在线|亚洲| 成人性生交大片免费看视频在线 | 久久综合狠狠综合久久综合88| 欧美日韩国产成人在线免费| 欧美亚洲国产一区在线观看网站 | 国产福利一区二区| 国产精品中文字幕日韩精品| 韩国三级在线一区| 国产大陆a不卡| 成人一区在线看| 91麻豆国产自产在线观看| 99re亚洲国产精品| 在线视频国内一区二区| 精品视频一区二区三区免费| 欧美日韩一级黄| 亚洲嫩草精品久久| 一区二区高清视频在线观看| 亚欧色一区w666天堂| 丝袜亚洲精品中文字幕一区| 日韩av在线免费观看不卡| 久久成人羞羞网站| 成人午夜碰碰视频| 在线视频中文字幕一区二区| 欧美精品一级二级| 2021国产精品久久精品| 国产精品国产三级国产aⅴ入口|