Search in sources :

Example 6 with Out

use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.

the class MVTable method checkDeadlock.

@Override
public ArrayList<Session> checkDeadlock(Session session, Session clash, Set<Session> visited) {
    // only one deadlock check at any given time
    synchronized (MVTable.class) {
        if (clash == null) {
            // verification is started
            clash = session;
            visited = new HashSet<>();
        } else if (clash == session) {
            // we found a circle where this session is involved
            return New.arrayList();
        } else if (visited.contains(session)) {
            // find it out themselves
            return null;
        }
        visited.add(session);
        ArrayList<Session> error = null;
        for (Session s : lockSharedSessions.keySet()) {
            if (s == session) {
                // it doesn't matter if we have locked the object already
                continue;
            }
            Table t = s.getWaitForLock();
            if (t != null) {
                error = t.checkDeadlock(s, clash, visited);
                if (error != null) {
                    error.add(session);
                    break;
                }
            }
        }
        // take a local copy so we don't see inconsistent data, since we are
        // not locked while checking the lockExclusiveSession value
        Session copyOfLockExclusiveSession = lockExclusiveSession;
        if (error == null && copyOfLockExclusiveSession != null) {
            Table t = copyOfLockExclusiveSession.getWaitForLock();
            if (t != null) {
                error = t.checkDeadlock(copyOfLockExclusiveSession, clash, visited);
                if (error != null) {
                    error.add(session);
                }
            }
        }
        return error;
    }
}
Also used : Table(org.h2.table.Table) Session(org.h2.engine.Session)

Example 7 with Out

use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.

the class CipherFactory method setKeystore.

private static void setKeystore() throws IOException {
    Properties p = System.getProperties();
    if (p.getProperty(KEYSTORE_KEY) == null) {
        String fileName = KEYSTORE;
        byte[] data = getKeyStoreBytes(getKeyStore(KEYSTORE_PASSWORD), KEYSTORE_PASSWORD);
        boolean needWrite = true;
        if (FileUtils.exists(fileName) && FileUtils.size(fileName) == data.length) {
            // don't need to overwrite the file if it did not change
            InputStream fin = FileUtils.newInputStream(fileName);
            byte[] now = IOUtils.readBytesAndClose(fin, 0);
            if (now != null && Arrays.equals(data, now)) {
                needWrite = false;
            }
        }
        if (needWrite) {
            try {
                OutputStream out = FileUtils.newOutputStream(fileName, false);
                out.write(data);
                out.close();
            } catch (Exception e) {
                throw DbException.convertToIOException(e);
            }
        }
        String absolutePath = FileUtils.toRealPath(fileName);
        System.setProperty(KEYSTORE_KEY, absolutePath);
    }
    if (p.getProperty(KEYSTORE_PASSWORD_KEY) == null) {
        System.setProperty(KEYSTORE_PASSWORD_KEY, KEYSTORE_PASSWORD);
    }
}
Also used : ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStream(java.io.OutputStream) SysProperties(org.h2.engine.SysProperties) Properties(java.util.Properties) DbException(org.h2.message.DbException) IOException(java.io.IOException)

Example 8 with Out

use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.

the class PgServerThread method run.

@Override
public void run() {
    try {
        server.trace("Connect");
        InputStream ins = socket.getInputStream();
        out = socket.getOutputStream();
        dataInRaw = new DataInputStream(ins);
        while (!stop) {
            process();
            out.flush();
        }
    } catch (EOFException e) {
    // more or less normal disconnect
    } catch (Exception e) {
        server.traceError(e);
    } finally {
        server.trace("Disconnect");
        close();
    }
}
Also used : DataInputStream(java.io.DataInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) EOFException(java.io.EOFException) DataInputStream(java.io.DataInputStream) DbException(org.h2.message.DbException) SQLException(java.sql.SQLException) IOException(java.io.IOException) EOFException(java.io.EOFException)

Example 9 with Out

use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.

the class WebServer method saveProperties.

/**
 * Save the settings to the properties file.
 *
 * @param prop null or the properties webPort, webAllowOthers, and webSSL
 */
synchronized void saveProperties(Properties prop) {
    try {
        if (prop == null) {
            Properties old = loadProperties();
            prop = new SortedProperties();
            prop.setProperty("webPort", "" + SortedProperties.getIntProperty(old, "webPort", port));
            prop.setProperty("webAllowOthers", "" + SortedProperties.getBooleanProperty(old, "webAllowOthers", allowOthers));
            prop.setProperty("webSSL", "" + SortedProperties.getBooleanProperty(old, "webSSL", ssl));
            if (commandHistoryString != null) {
                prop.setProperty(COMMAND_HISTORY, commandHistoryString);
            }
        }
        ArrayList<ConnectionInfo> settings = getSettings();
        int len = settings.size();
        for (int i = 0; i < len; i++) {
            ConnectionInfo info = settings.get(i);
            if (info != null) {
                prop.setProperty(String.valueOf(len - i - 1), info.getString());
            }
        }
        if (!"null".equals(serverPropertiesDir)) {
            OutputStream out = FileUtils.newOutputStream(serverPropertiesDir + "/" + Constants.SERVER_PROPERTIES_NAME, false);
            prop.store(out, "H2 Server Properties");
            out.close();
        }
    } catch (Exception e) {
        DbException.traceThrowable(e);
    }
}
Also used : OutputStream(java.io.OutputStream) SortedProperties(org.h2.util.SortedProperties) SysProperties(org.h2.engine.SysProperties) Properties(java.util.Properties) SortedProperties(org.h2.util.SortedProperties) DbException(org.h2.message.DbException) SQLException(java.sql.SQLException) IOException(java.io.IOException)

Example 10 with Out

use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.

the class MVStoreTool method info.

/**
 * Read the summary information of the file and write them to system out.
 *
 * @param fileName the name of the file
 * @param writer the print writer
 * @return null if successful (if there was no error), otherwise the error
 *         message
 */
public static String info(String fileName, Writer writer) {
    PrintWriter pw = new PrintWriter(writer, true);
    if (!FilePath.get(fileName).exists()) {
        pw.println("File not found: " + fileName);
        return "File not found: " + fileName;
    }
    long fileLength = FileUtils.size(fileName);
    MVStore store = new MVStore.Builder().fileName(fileName).readOnly().open();
    try {
        MVMap<String, String> meta = store.getMetaMap();
        Map<String, Object> header = store.getStoreHeader();
        long fileCreated = DataUtils.readHexLong(header, "created", 0L);
        TreeMap<Integer, Chunk> chunks = new TreeMap<>();
        long chunkLength = 0;
        long maxLength = 0;
        long maxLengthLive = 0;
        long maxLengthNotEmpty = 0;
        for (Entry<String, String> e : meta.entrySet()) {
            String k = e.getKey();
            if (k.startsWith("chunk.")) {
                Chunk c = Chunk.fromString(e.getValue());
                chunks.put(c.id, c);
                chunkLength += c.len * MVStore.BLOCK_SIZE;
                maxLength += c.maxLen;
                maxLengthLive += c.maxLenLive;
                if (c.maxLenLive > 0) {
                    maxLengthNotEmpty += c.maxLen;
                }
            }
        }
        pw.printf("Created: %s\n", formatTimestamp(fileCreated, fileCreated));
        pw.printf("Last modified: %s\n", formatTimestamp(FileUtils.lastModified(fileName), fileCreated));
        pw.printf("File length: %d\n", fileLength);
        pw.printf("The last chunk is not listed\n");
        pw.printf("Chunk length: %d\n", chunkLength);
        pw.printf("Chunk count: %d\n", chunks.size());
        pw.printf("Used space: %d%%\n", getPercent(chunkLength, fileLength));
        pw.printf("Chunk fill rate: %d%%\n", maxLength == 0 ? 100 : getPercent(maxLengthLive, maxLength));
        pw.printf("Chunk fill rate excluding empty chunks: %d%%\n", maxLengthNotEmpty == 0 ? 100 : getPercent(maxLengthLive, maxLengthNotEmpty));
        for (Entry<Integer, Chunk> e : chunks.entrySet()) {
            Chunk c = e.getValue();
            long created = fileCreated + c.time;
            pw.printf("  Chunk %d: %s, %d%% used, %d blocks", c.id, formatTimestamp(created, fileCreated), getPercent(c.maxLenLive, c.maxLen), c.len);
            if (c.maxLenLive == 0) {
                pw.printf(", unused: %s", formatTimestamp(fileCreated + c.unused, fileCreated));
            }
            pw.printf("\n");
        }
        pw.printf("\n");
    } catch (Exception e) {
        pw.println("ERROR: " + e);
        e.printStackTrace(pw);
        return e.getMessage();
    } finally {
        store.close();
    }
    pw.flush();
    return null;
}
Also used : TreeMap(java.util.TreeMap) IOException(java.io.IOException) DbException(org.h2.message.DbException) PrintWriter(java.io.PrintWriter)

Aggregations

ByteArrayOutputStream (java.io.ByteArrayOutputStream)27 IOException (java.io.IOException)23 OutputStream (java.io.OutputStream)19 ByteArrayInputStream (java.io.ByteArrayInputStream)17 SQLException (java.sql.SQLException)17 DbException (org.h2.message.DbException)17 Random (java.util.Random)11 ResultSet (java.sql.ResultSet)10 InputStream (java.io.InputStream)9 Statement (java.sql.Statement)9 Connection (java.sql.Connection)7 PrintStream (java.io.PrintStream)6 Properties (java.util.Properties)6 Task (org.h2.util.Task)6 BufferedOutputStream (java.io.BufferedOutputStream)5 File (java.io.File)5 FileOutputStream (java.io.FileOutputStream)5 InputStreamReader (java.io.InputStreamReader)5 PipedInputStream (java.io.PipedInputStream)5 OutputStreamWriter (java.io.OutputStreamWriter)4