You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2017/10/03 19:34:26 UTC
[40/65] [abbrv] jena git commit: JENA-1397: Rename java packages
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/migrate/L.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/migrate/L.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/migrate/L.java
deleted file mode 100644
index c3c6581..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/migrate/L.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.migrate;
-
-import java.io.IOException ;
-import java.io.OutputStream ;
-import java.io.OutputStreamWriter ;
-import java.io.Writer ;
-import java.nio.ByteBuffer ;
-import java.nio.charset.StandardCharsets ;
-import java.util.UUID ;
-import java.util.concurrent.* ;
-import java.util.concurrent.locks.Lock ;
-import java.util.function.Supplier ;
-
-import org.apache.jena.atlas.io.IO ;
-import org.apache.jena.atlas.lib.Bytes ;
-import org.apache.jena.atlas.lib.StrUtils ;
-import org.apache.jena.shared.uuid.JenaUUID ;
-
-/** Misc class */
-public class L {
-
- // Not to be confused with UUID.nameUUIDFromBytes (a helper for version 3 UUIDs)
- /**
- * Java UUID to bytes (most significant first)
- */
- public static byte[] uuidAsBytes(UUID uuid) {
- return uuidAsBytes(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()) ;
- }
-
- /**
- * Jena UUID to bytes (most significant first)
- */
- public static byte[] uuidAsBytes(JenaUUID uuid) {
- return uuidAsBytes(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()) ;
- }
-
- /** UUID, as two longs, as bytes */
- public static byte[] uuidAsBytes(long mostSignificantBits, long leastSignificantBits) {
- byte[] bytes = new byte[16] ;
- Bytes.setLong(mostSignificantBits, bytes, 0);
- Bytes.setLong(leastSignificantBits, bytes, 8);
- return bytes ;
- }
-
- /** A UUID string to bytes */
- public static byte[] uuidAsBytes(String str) {
- return uuidAsBytes(UUID.fromString(str)) ;
- }
-
- public static String uuidToString(long mostSignificantBits, long leastSignificantBits) {
- return new UUID(mostSignificantBits, leastSignificantBits).toString() ;
- //JenaUUID.toString(mostSignificantBits, leastSignificantBits)
- }
-
- private static ExecutorService executor = Executors.newCachedThreadPool() ;
-
- /**
- * Run asynchronously on another thread ; the thread has started
- * when this function returns.
- */
- public static void async(Runnable r) {
- Semaphore semaStart = new Semaphore(0, true) ;
- Runnable r2 = () -> {
- semaStart.release(1) ;
- r.run();
- } ;
- executor.execute(r2);
- semaStart.acquireUninterruptibly();
- }
-
- /** Run synchronously but on another thread. */
- public static void syncOtherThread(Runnable r) {
- runCallable(()->{
- r.run();
- return null ;
- }) ;
- }
-
- /** Run synchronously but on another thread. */
- public static <T> T syncCallThread(Supplier<T> r) {
- return runCallable(() -> {
- T t = r.get() ;
- return t ;
- }) ;
- }
-
- private static <T> T runCallable(Callable<T> action) {
- try { return executor.submit(action).get() ; }
- catch (Exception e) {
- e.printStackTrace();
- return null ;
- }
- }
-
-
- /** Execute. Preform the "before" action, then main action.
- * Always call the "after" runnable if the "bafore" succeeded.
- * Becareful about argument order.
- * @param action
- * @param before
- * @param after
- */
- public static void withBeforeAfter(Runnable action, Runnable before, Runnable after) {
- before.run();
- try { action.run(); }
- finally { after.run(); }
- }
-
- /** Execute. Preform the "before" action, then main action.
- * Always call the "after" runnable if the "bafore" succeeded.
- * Becareful about argument order.
- * @param action
- * @param before
- * @param after
- */
- public static <V> V callWithBeforeAfter(Supplier<V> action, Runnable before, Runnable after) {
- before.run();
- try { return action.get() ; }
- finally { after.run(); }
- }
-
- /** Execute; always call the "after" runnable */
- public static void withAfter(Runnable action, Runnable after) {
- try { action.run(); }
- finally { after.run(); }
- }
-
- /** Execute and return a value; always call the "after" runnable */
- public static <V> V callWithAfter(Supplier<V> action, Runnable after) {
- try { return action.get() ; }
- finally { after.run(); }
- }
-
- /** Run inside a Lock */
- public static <V> V callWithLock(Lock lock, Supplier<V> r) {
- return callWithBeforeAfter(r, ()->lock.lock(), ()->lock.unlock()) ;
- }
-
- /** Run inside a Lock */
- public static void withLock(Lock lock, Runnable r) {
- withBeforeAfter(r, ()->lock.lock(), ()->lock.unlock()) ;
- }
-
- // ==> IO.writeWholeFileAsUTF8
-
- /** Write a string to a file as UTF-8. The file is closed after the operation.
- * @param filename
- * @param content String to be writtem
- * @throws IOException
- */
-
- public static void writeStringAsUTF8(String filename, String content) throws IOException {
- try ( OutputStream out = IO.openOutputFileEx(filename) ) {
- writeStringAsUTF8(out, content) ;
- out.flush() ;
- }
- }
-
- /** Read a whole stream as UTF-8
- *
- * @param out OutputStream to be read
- * @param content String to be written
- * @throws IOException
- */
- public static void writeStringAsUTF8(OutputStream out, String content) throws IOException {
- Writer w = new OutputStreamWriter(out, StandardCharsets.UTF_8) ;
- w.write(content);
- w.flush();
- // Not close.
- }
-
- // ==> IO.writeWholeFileAsUTF8
-
- /** String to ByteBuffer */
- public static ByteBuffer stringToByteBuffer(String str) {
- byte[] b = StrUtils.asUTF8bytes(str) ;
- return ByteBuffer.wrap(b) ;
- }
-
- /** ByteBuffer to String */
- public static String byteBufferToString(ByteBuffer bb) {
- byte[] b = new byte[bb.remaining()] ;
- bb.get(b) ;
- return StrUtils.fromUTF8bytes(b) ;
- }
-
-
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/FileLib.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/FileLib.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/FileLib.java
deleted file mode 100644
index 8293d94..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/FileLib.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.sys;
-
-import java.io.FileNotFoundException ;
-import java.io.IOException ;
-import java.io.RandomAccessFile ;
-import java.nio.channels.FileChannel ;
-
-import org.apache.jena.atlas.io.IO ;
-import org.seaborne.dboe.base.file.ChannelManager ;
-import org.seaborne.dboe.base.file.FileException ;
-
-// => IO
-public class FileLib
-{
- // Check whether still used.
-
- public static FileChannel openUnmanaged(String filename) {
- return openUnmanaged(filename, "rw") ;
- }
-
- // And operation from BufferChannelFile
-
- public static FileChannel openUnmanaged(String filename, String mode) {
- try {
- @SuppressWarnings("resource")
- RandomAccessFile out = new RandomAccessFile(filename, mode) ;
- FileChannel channel = out.getChannel() ;
- return channel ;
- }
- catch (FileNotFoundException e) {
- IO.exception(e) ;
- return null ;
- }
- }
-
- // TODO remove and call ChannelManager directly
- public static FileChannel openManaged(String filename) {
- return openManaged(filename, "rw") ;
- }
-
- // TODO remove and call ChannelManager directly
- public static FileChannel openManaged(String filename, String mode) {
- return ChannelManager.acquire(filename, mode) ;
- }
-
- public static long size(FileChannel channel) {
- try {
- return channel.size() ;
- } catch (IOException ex)
- { IO.exception(ex) ; return -1L ; }
- }
-
- public static void truncate(FileChannel channel, long posn) {
- try { channel.truncate(posn) ; }
- catch (IOException ex) { IO.exception(ex) ; }
- }
-
- public static void close(FileChannel channel) {
- ChannelManager.release(channel) ;
- }
-
- public static void sync(FileChannel channel) {
- try {
- channel.force(true) ;
- } catch (IOException ex)
- { throw new FileException("FileBase.sync", ex) ; }
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Names.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Names.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Names.java
deleted file mode 100644
index 14b9fd6..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Names.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.sys;
-
-/** Names of things in TDB */
-public class Names
-{
- /** Filename of the TDB configuration file */
- public static final String TDB_CONFIG_FILE = "tdb.cfg" ;
-
- /** Filename of the TDB lock file */
- public static final String TDB_LOCK_FILE = "tdb.lock" ;
-
- /* System files */
- public static final String extJournal = "jrnl" ;
- /* Component Transactional State */
- public static final String extState = "cts" ;
-
- public static final String journalFileBase = "journal" ;
- public static final String journalFile = journalFileBase+"."+extJournal ;
-
- // ++ Elsewhere
- /* RDF indexes */
- public static final String primaryIndexTriples = "SPO" ;
- public static final String[] tripleIndexes = { primaryIndexTriples, "POS", "OSP" } ;
-
- public static final String primaryIndexQuads = "GSPO" ;
- public static final String[] quadIndexes = { primaryIndexQuads, "GPOS", "GOSP", "POSG", "OSPG", "SPOG"} ;
-
- public static final String primaryIndexPrefix = "GPU" ;
- public static final String[] prefixIndexes = { primaryIndexPrefix } ;
- // ++ Elsewhere
-
- /* B+Trees - nodes file and records file */
- public static final String extBptState = "bpt" ;
- public static final String extBptTree = "idn" ;
- public static final String extBptRecords = "dat" ;
-
-// /* B+Trees - single file per tree */
-// public static final String btExt = "idx" ;
-
- /* ExtHash - dictionary file*/
- public static final String extHashExt = "exh" ;
- public static final String extHashBucketExt = "dat" ;
-
- public static final String datasetConfig = "config-tdb" ; // name of the TDB configuration file.
-
- /* Node files */
- public static final String extBdfState = "bdf" ; // Node state
- public static final String extObjNodeData = "obj" ;
- public static final String nodeTableBaseName = "nodes" ; // Node table
-
- /** Prefixes file */
- public static final String prefixTableBaseName = "prefixes" ; // Prefix node table
-
- /** Optimizer / stats */
- public static final String optStats = "stats.opt" ;
- public static final String optFixed = "fixed.opt" ;
- public static final String optNone = "none.opt" ;
- public static final String optDefault = optFixed ;
-
- public static final String extMeta = "info" ;
- public static final String directoryMetafile = "this" ; // Root name of the directory for a metafile.
-
- /** Name to indicate in-memory */
- public static final String memName = "--mem--" ;
-
- public static boolean isMem(String name) { return memName.equals(name) ; }
-
- // ---- Names for Java properties in metadata files
-
- public static String makeKey(String root, String...elements)
- { return makeName(root, elements) ; }
-
- public static String makeName(String root, String...elements)
- {
- StringBuilder sb = new StringBuilder() ;
- sb.append(root) ;
- for ( String s : elements )
- {
- if ( ! s.startsWith(".") )
- sb.append(".") ;
- sb.append(s) ;
- }
- return sb.toString() ;
- }
-
- // Component elements.
- public static final String elNode = "node" ;
- public static final String elBPlusTree = "bptree" ;
- public static final String elIndex = "index" ;
- public static final String elObject = "object" ;
-
- public static final String elType = "type" ;
- public static final String elLayout = "layout" ;
- public static final String elVersion = "version" ;
- public static final String elTimestamp = "timestamp" ;
- public static final String elCreated = "created" ;
-
- // Root names.
- public static final String keyNS = "tdb" ;
- public static final String keyNSNode = makeName(keyNS, elNode) ;
- public static final String keyNSBPlusTree = makeName(keyNS, elBPlusTree) ;
-
- // Location metadata - in the directory wide metadata file.
- public static final String kVersion = makeName(keyNS, elVersion) ;
- public static final String kCreatedDate = makeName(keyNS, elTimestamp) ;
-
- // Node table metadata
- public static final String kNodeTableType = makeName(keyNS, elNode, elType) ;
- public static final String kNodeTableLayout = makeName(keyNS, elNode, elLayout) ;
-
-// // Object file
-// public static final String kObjectTableType = makeName(keyNS, elObject, elType) ;
-//
-// // Default index metadata - in the index metadata file.
-//
-// public static final String kIndexType = makeName(keyNS, elIndex, elType) ;
-// public static final String kIndexFileLayout = makeName(keyNS, elIndex, elLayout) ;
-
- // See also BPlusTreeParams for keyNSBPlusTree derived names.
-
-// // Current values
-// public static final String currentIndexType = IndexType.BPlusTree.getName() ;
-// public static final String currentIndexFileVersion = "v1" ;
-
- // Property strings - Setup
-
- public static final String pNode2NodeIdCacheSize = "tdb.cache.node2nodeid.size" ;
- public static final String pNodeId2NodeCacheSize = "tdb.cache.nodeid2node.size" ;
- public static final String pNodeMissesCacheSize = "tdb.cache.nodeMiss.size" ;
- public static final String pBlockWriteCacheSize = "tdb.cache.blockwrite.size" ;
- public static final String pBlockReadCacheSize = "tdb.cache.blockread.size" ;
- public static final String pSyncTick = "tdb.synctick" ;
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/ProcessUtils.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/ProcessUtils.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/ProcessUtils.java
deleted file mode 100644
index 2741fad..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/ProcessUtils.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.sys;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.List;
-
-public class ProcessUtils {
-
- private static int myPid = -1;
-
- /**
- * Tries to get the PID of the current process caching it for future calls
- * since it won't change throughout the life of the process
- *
- * @param fallback
- * Fallback PID to return if unable to determine the PID i.e. an
- * error code to return
- *
- * @return PID of current process or provided {@code fallback} if unable to
- * determine PID
- */
- public static int getPid(int fallback) {
- if (myPid != -1)
- return myPid;
-
- String runtimeBeanName = ManagementFactory.getRuntimeMXBean().getName();
- if (runtimeBeanName == null) {
- return useFallbackPid(fallback);
- }
-
- // Bean name will have format PID@hostname so we try to parse the PID
- // portion
- int index = runtimeBeanName.indexOf("@");
- if (index < 0)
- return useFallbackPid(fallback);
- try {
- // Parse and cache for future reuse
- String pidData = runtimeBeanName.substring(0, index);
- myPid = Integer.parseInt(pidData);
- return myPid;
- } catch (NumberFormatException e) {
- // Invalid PID
- return useFallbackPid(fallback);
- }
- }
-
- private static int useFallbackPid(int fallback) {
- // In the case where we can't determine our PID then treat ourselves as
- // no owner and cache for future use
- myPid = fallback;
- return myPid;
- }
-
- /**
- * Determines whether a given PID is alive
- *
- * @param pid
- * PID
- * @return True if the given PID is alive or unknown, false if it is dead
- */
- public static boolean isAlive(int pid) {
- String pidStr = Integer.toString(pid);
- try {
- List<String> data = getProcessInfo(pidStr);
-
- // Expect a line to contain the PID to indicate the process is
- // alive
- for (String lineData : data) {
- if (lineData.contains(pidStr))
- return true;
- }
-
- // Did not find any lines mentioning the PID so we can safely
- // assume that process is dead
- return false;
- } catch (IOException e) {
- // If any error running the process to check for the live process
- // then our check failed and for safety we assume the process is
- // alive
-
- Sys.errlog
- .warn("Your platform does not support checking process liveness so TDB disk locations cannot be reliably locked to prevent possible corruption due to unsafe multi-JVM usage");
- return true;
- }
- }
-
- /**
- * Gets whether the platform we are running on will cause us to treat
- * negative (i.e. invalid) PIDs as alive because of the format in which the
- * command line process monitor application for the system returns errors
- * for invalid PIDs
- *
- * @return True if a negative PID is treated as alive on this platform or we
- * cannot determine liveness for PIDs on this platform, false
- * otherwise
- */
- public static boolean negativePidsTreatedAsAlive() {
- return isAlive(-1);
- }
-
- /**
- * Gets process information based on the given PID string
- *
- * @param pidStr
- * PID string
- * @return Output of running the OSes appropriate command line task info
- * application
- * @throws IOException
- * Thrown if there is a problem running the command line
- * application or reading the data returned
- */
- private static List<String> getProcessInfo(String pidStr) throws IOException {
- Process p;
- if (Sys.isWindows) {
- // Use the Windows tasklist utility
- ProcessBuilder builder = new ProcessBuilder("tasklist", "/FI", "PID eq " + pidStr);
- builder.redirectErrorStream(true);
- p = builder.start();
- } else {
- // Use the ps utility
- ProcessBuilder builder = new ProcessBuilder("ps", "-p", pidStr);
- builder.redirectErrorStream(true);
- p = builder.start();
- }
-
- // Run and read data from the process
- try(BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
- List<String> data = new ArrayList<>();
- String line = null;
- while ((line = reader.readLine()) != null) {
- data.add(line);
- }
- return data;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Sys.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Sys.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Sys.java
deleted file mode 100644
index d0264d5..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/Sys.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.sys;
-
-import java.nio.ByteOrder;
-import java.util.concurrent.Executor ;
-import java.util.concurrent.Executors ;
-
-import org.apache.jena.atlas.logging.Log ;
-import org.seaborne.dboe.DBOpEnvException ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
-
-/** Low level environment */
-public class Sys
-{
- static final Logger log = LoggerFactory.getLogger("Sys") ;
-
- /** System log - use for general messages (a few) and warnings.
- * Generally, do not log events unless you want every user to see them every time.
- * Libraries and embedded systems should be seen and not heard.
- * @see #errlog
- */
-
- /** General system log */
- public static final Logger syslog = LoggerFactory.getLogger("System") ;
- /** Send warnings and error */
- public static final Logger errlog = LoggerFactory.getLogger("System") ;
-
- /** Size, in bytes, of a Java long */
- public static final int SizeOfLong = Long.BYTES ; // Long.SIZE/Byte.SIZE ;
-
- /** Size, in bytes, of a Java int */
- public static final int SizeOfInt = Integer.BYTES ; //Integer.SIZE/Byte.SIZE ;
-
- public static final boolean is64bitSystem = determineIf64Bit() ;
-
- public static final ByteOrder NetworkOrder = ByteOrder.BIG_ENDIAN ;
-
- // To make the class initialize
- static public void init() {}
-
- public static void panic(Class<? > clazz, String string) {
- Log.error(clazz, string) ;
- throw new DBOpEnvException(string) ;
- }
- public static final boolean isWindows = determineIfWindows() ; // Memory mapped files behave differently.
-
- //Or look in File.listRoots.
- //Alternative method:
- // http://stackoverflow.com/questions/1293533/name-of-the-operating-system-in-java-not-os-name
-
- private static boolean determineIfWindows() {
- String s = System.getProperty("os.name") ;
- if ( s == null )
- return false ;
- return s.startsWith("Windows ") ;
- }
-
- /** A general thread pool */
- public static Executor executor = Executors.newCachedThreadPool() ;
-
- private static boolean determineIf64Bit() {
- String s = System.getProperty("sun.arch.data.model") ;
- if ( s != null ) {
- boolean b = s.equals("64") ;
- syslog.debug("System architecture: " + (b ? "64 bit" : "32 bit")) ;
- return b ;
- }
- // Not a SUN VM
- s = System.getProperty("java.vm.info") ;
- if ( s == null ) {
- log.warn("Can't determine the data model") ;
- return false ;
- }
- log.debug("Can't determine the data model from 'sun.arch.data.model' - using java.vm.info") ;
- boolean b = s.contains("64") ;
- syslog.debug("System architecture: (from java.vm.info) " + (b ? "64 bit" : "32 bit")) ;
- return b ;
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemFile.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemFile.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemFile.java
deleted file mode 100644
index d95ceb8..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemFile.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.sys;
-
-public class SystemFile {
- public static final int ObjectFileWriteBufferSize = 8*1024 ;
-}
-
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemIndex.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemIndex.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemIndex.java
deleted file mode 100644
index 08cfefa..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/sys/SystemIndex.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.sys;
-
-import org.seaborne.dboe.DBOpEnvException ;
-import org.seaborne.dboe.base.block.FileMode ;
-
-public class SystemIndex
-{
- /** Size, in bytes, of a pointer between blocks */
- public static final int SizeOfPointer = Sys.SizeOfInt ;
-
- public static final boolean is64bitSystem = Sys.is64bitSystem ;
-
- // To make the class initialize
- static public void init() {}
-
- /** Size, in bytes, of a block */
- public static final int BlockSize = 8*1024 ; // intValue("BlockSize", 8*1024) ;
-
- /** Size, in bytes, of a block for testing */
- public static final int BlockSizeTest = 1024 ; // intValue("BlockSizeTest", 1024) ;
-
- /** Size, in bytes, of a block for testing */
- public static final int BlockSizeTestMem = 500 ;
-
-// /** Size, in bytes, of a memory block */
-// public static final int BlockSizeMem = 32*8 ; //intValue("BlockSizeMem", 32*8 ) ;
-
- /** Order of an in-memory BTree or B+Tree */
- public static final int OrderMem = 5 ; // intValue("OrderMem", 5) ;
-
- /** Size, in bytes, of a segment (used for memory mapped files) */
- public static final int SegmentSize = 8*1024*1024 ; // intValue("SegmentSize", 8*1024*1024) ;
-
- // ---- Cache sizes (within the JVM)
-
- /** Size of Node to NodeId cache.
- * Used to map from Node to NodeId spaces.
- * Used for loading and for query preparation.
- */
- public static final int Node2NodeIdCacheSize = intValue("Node2NodeIdCacheSize", ( is64bitSystem ? 100*1000 : 50*1000 )) ;
-
- /** Size of NodeId to Node cache.
- * Used to map from NodeId to Node spaces.
- * Used for retriveing results.
- */
- public static final int NodeId2NodeCacheSize = intValue("NodeId2NodeCacheSize", ( is64bitSystem ? 500*1000 : 50*1000 ) ) ;
-
- /** Size of Node lookup miss cache. */
- public static final int NodeMissCacheSize = 100 ;
-
- /** Size of the delayed-write block cache (32 bit systems only) (per file) */
- public static final int BlockWriteCacheSize = intValue("BlockWriteCacheSize", 2*1000) ;
-
- /** Size of read block cache (32 bit systems only). Increase JVM size as necessary. Per file. */
- public static final int BlockReadCacheSize = intValue("BlockReadCacheSize", 10*1000) ;
-
- private static int intValue(String name, int dft) { return dft ; }
-
-
- public static void setNullOut(boolean nullOut)
- { NullOut = nullOut ; }
-
- /** Are we nulling out unused space in bytebuffers (records, points etc) */
- public static boolean getNullOut()
- { return NullOut ; }
-
- /** null out (with the FillByte) freed up space in buffers */
- public static boolean NullOut = false ;
-
- /** FillByte value for NullOut */
- public static final byte FillByte = (byte)0xFF ;
-
- public static boolean Checking = false ; // This isn't used enough!
-
- // ---- File mode
-
- private static FileMode fileMode = null ;
- public static FileMode fileMode()
- {
- if ( fileMode == null )
- fileMode = determineFileMode() ;
- return fileMode ;
- }
-
- public static void setFileMode(FileMode newFileMode)
- {
- if ( fileMode != null )
- {
- Sys.log.warn("System file mode already determined - setting it has no effect") ;
- return ;
- }
- fileMode = newFileMode ;
- }
-
- // So the test suite can setup thing up ... very carefully.
- /*package*/ static void internalSetFileMode(FileMode newFileMode)
- {
- fileMode = newFileMode ;
- }
-
- private static FileMode determineFileMode()
- {
- // Be careful that this is not called very, very early, before --set might be seen.
- // Hence delayed access above in fileMode().
-
- //String x = ARQ.getContext().getAsString(SystemTDB.symFileMode, "default") ;
- String x = "default" ;
-
- if ( x.equalsIgnoreCase("direct") )
- {
- Sys.syslog.info("File mode: direct (forced)") ;
- return FileMode.direct ;
- }
- if ( x.equalsIgnoreCase("mapped") )
- {
- Sys.syslog.info("File mode: mapped (forced)") ;
- return FileMode.mapped ;
- }
-
- if ( x.equalsIgnoreCase("default") )
- {
- if ( is64bitSystem )
- {
- Sys.syslog.debug("File mode: Mapped") ;
- return FileMode.mapped ;
- }
- Sys.syslog.debug("File mode: Direct") ;
- return FileMode.direct ;
- }
- throw new DBOpEnvException("Unrecognized file mode (not one of 'default', 'direct' or 'mapped': "+x) ;
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/BufferTestLib.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/BufferTestLib.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/BufferTestLib.java
deleted file mode 100644
index 3e371b3..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/BufferTestLib.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.test;
-
-import java.nio.ByteBuffer ;
-
-import org.seaborne.dboe.base.block.Block ;
-
-public class BufferTestLib
-{
- public static boolean sameValue(Block block1, Block block2)
- {
- if ( block1.getId() != block2.getId()) return false ;
- ByteBuffer bb1 = block1.getByteBuffer() ;
- ByteBuffer bb2 = block2.getByteBuffer() ;
-
- if ( bb1.capacity() != bb2.capacity() ) return false ;
-
- for ( int i = 0 ; i < bb1.capacity() ; i++ )
- if ( bb1.get(i) != bb2.get(i) ) return false ;
- return true ;
- }
-
- public static boolean sameValue(ByteBuffer bb1, ByteBuffer bb2)
- {
- if ( bb1.capacity() != bb2.capacity() ) return false ;
-
- int posn1 = bb1.position();
- int limit1 = bb1.limit();
- int posn2 = bb2.position();
- int limit2 = bb2.limit();
-
- bb1.clear() ;
- bb2.clear() ;
-
- try {
- for ( int i = 0 ; i < bb1.capacity() ; i++ )
- if ( bb1.get(i) != bb2.get(i) ) return false ;
- return true ;
- } finally {
- bb1.position(posn1) ;
- bb1.limit(limit1) ;
- bb2.position(posn2) ;
- bb2.limit(limit2) ;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/RecordLib.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/RecordLib.java b/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/RecordLib.java
deleted file mode 100644
index 0c411d9..0000000
--- a/jena-db/jena-dboe-base/src/main/java/org/seaborne/dboe/test/RecordLib.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.seaborne.dboe.test;
-
-
-import java.util.ArrayList ;
-import java.util.Iterator ;
-import java.util.List ;
-
-import org.apache.jena.atlas.iterator.Iter ;
-import org.apache.jena.atlas.lib.Bytes ;
-import org.seaborne.dboe.base.record.Record ;
-import org.seaborne.dboe.base.record.RecordFactory ;
-
-/** Record support operations (mainly for testing using ints) */
-
-public class RecordLib
-{
- // Size of a record when testing (one integer)
- public final static int TestRecordLength = 4 ;
-
- public final static RecordFactory recordFactory = new RecordFactory(TestRecordLength, 0) ;
-
- public static Record intToRecord(int v) { return intToRecord(v, recordFactory) ; }
- public static Record intToRecord(int v, int recLen) { return intToRecord(v, new RecordFactory(recLen, 0)) ; }
-
- public static Record intToRecord(int v, RecordFactory factory)
- {
- byte[] vb = Bytes.packInt(v) ;
-
- int recLen = factory.recordLength() ;
- byte[] bb = new byte[recLen] ;
- int x = 0 ; // Start point in bb.
- if ( recLen > 4 )
- x = recLen-4 ;
-
- int len = Math.min(4, recLen) ;
- int z = 4-len ; // Start point in vb
-
- // Furthest right bytes.
- for ( int i = len-1 ; i >= 0 ; i-- )
- bb[x+i] = vb[z+i] ;
-
- return factory.create(bb) ;
- }
-
- public static List<Record> intToRecord(int[] v) { return intToRecord(v, recordFactory) ; }
-
- public static List<Record> intToRecord(int[] v, int recLen)
- { return intToRecord(v, new RecordFactory(recLen, 0)) ; }
-
- static List<Record> intToRecord(int[] v, RecordFactory factory)
- {
- List<Record> x = new ArrayList<>() ;
- for ( int i : v )
- x.add(intToRecord(i, factory)) ;
- return x ;
- }
-
- public static int recordToInt(Record key)
- {
- return Bytes.getInt(key.getKey()) ;
- }
-
- public static List<Integer> toIntList(Iterator<Record> iter)
- {
- return Iter.toList(Iter.map(iter, item->recordToInt(item))) ;
- }
-
- public static Record r(int v)
- {
- return RecordLib.intToRecord(v, RecordLib.TestRecordLength) ;
- }
-
- public static int r(Record rec)
- {
- return RecordLib.recordToInt(rec) ;
- }
-
- public static List<Integer> toIntList(int... vals)
- {
- List<Integer> x = new ArrayList<>() ;
- for ( int i : vals )
- x.add(i) ;
- return x ;
- }
-
- public static List<Integer> r(Iterator<Record> iter)
- {
- return RecordLib.toIntList(iter) ;
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/ConfigTestDBOE.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/ConfigTestDBOE.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/ConfigTestDBOE.java
new file mode 100644
index 0000000..9aa876a
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/ConfigTestDBOE.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe;
+
+import org.apache.jena.atlas.lib.FileOps ;
+import org.apache.jena.dboe.sys.Sys;
+
+public class ConfigTestDBOE
+{
+ private static String testingDataRoot = "testing" ;
+ // Place under target
+ private static final String testingDir = "target/dboe-testing" ;
+ static boolean nonDeleteableMMapFiles = Sys.isWindows ;
+
+ static boolean initialized = false ;
+
+ private static void init()
+ {
+ FileOps.ensureDir("target") ;
+ FileOps.ensureDir(testingDir) ;
+ initialized = true ;
+ }
+
+ private static int count = 0 ;
+
+ public static void setTestingDataRoot(String dir) { testingDataRoot = dir ; }
+ public static String getTestingDataRoot() { return testingDataRoot ; }
+
+ /** return a directory */
+ public static final String getCleanDir() {
+ init() ;
+ String dir = nonDeleteableMMapFiles ? getTestingDirUnique() : getTestingDir() ;
+ FileOps.ensureDir(dir);
+ FileOps.clearDirectory(dir) ;
+ return dir ;
+ }
+ /** Get a empty directory name that has not been used before in this JVM */
+
+ private static final String getTestingDirUnique()
+ {
+ init() ;
+ String dn = testingDir+"/D-"+(++count) ;
+ FileOps.ensureDir(dn) ;
+ FileOps.clearDirectory(dn) ;
+ return dn ;
+ }
+
+ public static final String getTestingDir()
+ {
+ init() ;
+ return testingDir ;
+ }
+
+ public static final void deleteTestingDir()
+ {
+ if ( ! FileOps.exists(testingDir) )
+ return ;
+ FileOps.clearDirectory(testingDir) ;
+ FileOps.deleteSilent(testingDir) ;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/TC_DBOE_IO.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/TC_DBOE_IO.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/TC_DBOE_IO.java
new file mode 100644
index 0000000..971da4c
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/TC_DBOE_IO.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe;
+
+import org.apache.jena.dboe.base.block.FileMode;
+import org.apache.jena.dboe.base.block.TS_Block;
+import org.apache.jena.dboe.base.buffer.TS_Buffer;
+import org.apache.jena.dboe.base.file.TS_File;
+import org.apache.jena.dboe.base.record.TS_Record;
+import org.apache.jena.dboe.base.recordfile.TS_RecordFile;
+import org.apache.jena.dboe.sys.SystemIndex;
+import org.apache.log4j.Level ;
+import org.apache.log4j.Logger ;
+import org.junit.AfterClass ;
+import org.junit.BeforeClass ;
+import org.junit.runner.RunWith ;
+import org.junit.runners.Suite ;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+ TS_Block.class
+ , TS_File.class
+ , TS_Buffer.class
+ , TS_Record.class
+ , TS_RecordFile.class
+} )
+
+public class TC_DBOE_IO {
+ static {
+ if ( false )
+ SystemIndex.setFileMode(FileMode.direct) ;
+ }
+
+ @BeforeClass static public void beforeClass()
+ {
+ //org.apache.log4j.LogManager.resetConfiguration() ;
+ //org.apache.log4j.PropertyConfigurator.configure("log4j.properties") ;
+ Logger.getLogger("org.apache.jena.tdb.info").setLevel(Level.WARN) ;
+ //Logger.getLogger("com.hp.hpl.jena.tdb.exec").setLevel(Level.WARN) ;
+ }
+
+ @AfterClass static public void afterClass() {
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/AbstractTestBlockMgr.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/AbstractTestBlockMgr.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/AbstractTestBlockMgr.java
new file mode 100644
index 0000000..e2f3452
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/AbstractTestBlockMgr.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.block ;
+
+import java.nio.ByteBuffer ;
+
+import static org.apache.jena.atlas.lib.ByteBufferLib.fill ;
+import org.junit.Assert ;
+import org.apache.jena.dboe.base.block.Block;
+import org.apache.jena.dboe.base.block.BlockMgr;
+import org.junit.After ;
+import org.junit.Before ;
+import org.junit.Test ;
+
+public abstract class AbstractTestBlockMgr extends Assert {
+ static final public int BlkSize = 256 ;
+
+ protected BlockMgr blockMgr = null ;
+
+ @Before
+ public void before() {
+ blockMgr = make() ;
+ blockMgr.beginUpdate() ;
+ }
+
+ @After
+ public void after() {
+ if ( blockMgr != null ) {
+ blockMgr.endUpdate() ;
+ blockMgr.close() ;
+ }
+ }
+
+ @Test
+ public void file01() {
+ long x = blockMgr.allocLimit() ;
+ assertTrue("First allocLimit : " + x, x >= 0) ;
+ // Assume no recycling.
+ Block block = blockMgr.allocate(BlkSize) ;
+ assertTrue("Block inside allocate boundary", block.getId() >= x) ;
+ ByteBuffer bb = block.getByteBuffer() ;
+ fill(bb, (byte)1) ;
+ blockMgr.write(block) ;
+ blockMgr.release(block) ;
+ }
+
+ @Test
+ public void file02() {
+ Block block = blockMgr.allocate(BlkSize) ;
+ ByteBuffer bb = block.getByteBuffer() ;
+ fill(bb, (byte)1) ;
+ long id = block.getId() ;
+ blockMgr.write(block) ;
+ blockMgr.release(block) ;
+
+ Block block2 = blockMgr.getRead(id) ;
+ ByteBuffer bb2 = block2.getByteBuffer() ;
+ assertEquals(bb2.capacity(), BlkSize) ;
+ assertEquals(bb2.get(0), (byte)1) ;
+ assertEquals(bb2.get(BlkSize - 1), (byte)1) ;
+ blockMgr.release(block2) ;
+ }
+
+ @Test
+ public void file03() {
+ Block block = blockMgr.allocate(BlkSize) ;
+ ByteBuffer bb = block.getByteBuffer() ;
+ fill(bb, (byte)2) ;
+ long id = block.getId() ;
+ blockMgr.write(block) ;
+ blockMgr.release(block) ;
+
+ Block block2 = blockMgr.getRead(id) ;
+ ByteBuffer bb2 = block2.getByteBuffer() ;
+ assertEquals(bb2.capacity(), BlkSize) ;
+ assertEquals(bb2.get(0), (byte)2) ;
+ assertEquals(bb2.get(BlkSize - 1), (byte)2) ;
+ blockMgr.release(block2) ;
+ }
+
+ @Test
+ public void multiAccess01() {
+ Block block1 = blockMgr.allocate(BlkSize) ;
+ Block block2 = blockMgr.allocate(BlkSize) ;
+ long id1 = block1.getId() ;
+ long id2 = block2.getId() ;
+
+ ByteBuffer bb1 = block1.getByteBuffer() ;
+ ByteBuffer bb2 = block2.getByteBuffer() ;
+
+ fill(bb1, (byte)1) ;
+ fill(bb2, (byte)2) ;
+
+ blockMgr.write(block1) ;
+ blockMgr.write(block2) ;
+ blockMgr.release(block1) ;
+ blockMgr.release(block2) ;
+
+ Block block3 = blockMgr.getRead(id1) ;
+ Block block4 = blockMgr.getRead(id2) ;
+
+ ByteBuffer bb_1 = block3.getByteBuffer() ;
+ ByteBuffer bb_2 = block4.getByteBuffer() ;
+
+ contains(bb_1, (byte)1) ;
+ contains(bb_2, (byte)2) ;
+
+ blockMgr.release(block3) ;
+ blockMgr.release(block4) ;
+ }
+
+ protected abstract BlockMgr make() ;
+
+ protected static void contains(ByteBuffer bb, byte fillValue) {
+ for ( int i = 0 ; i < bb.limit() ; i++ )
+ assertEquals("Index: " + i, bb.get(i), fillValue) ;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TS_Block.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TS_Block.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TS_Block.java
new file mode 100644
index 0000000..b3e3811
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TS_Block.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.block;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+ TestBlockMgrMem.class
+ , TestBlockMgrDirect.class
+ , TestBlockMgrMapped.class
+ , TestBlockMgrTracked.class
+})
+
+
+public class TS_Block
+{}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrDirect.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrDirect.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrDirect.java
new file mode 100644
index 0000000..ff83732
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrDirect.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.block;
+
+import org.apache.jena.atlas.lib.FileOps ;
+import org.apache.jena.dboe.ConfigTestDBOE;
+import org.apache.jena.dboe.base.block.BlockMgr;
+import org.apache.jena.dboe.base.block.BlockMgrFactory;
+import org.apache.jena.dboe.base.block.BlockMgrFileAccess;
+import org.apache.jena.dboe.base.file.BlockAccess;
+import org.apache.jena.dboe.base.file.BlockAccessDirect;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+public class TestBlockMgrDirect extends AbstractTestBlockMgr
+{
+ static final String filename = ConfigTestDBOE.getTestingDir()+"/block-mgr" ;
+
+ @BeforeClass static public void remove1() { FileOps.delete(filename) ; }
+ @AfterClass static public void remove2() { FileOps.delete(filename) ; }
+
+ @Override
+ protected BlockMgr make()
+ {
+ // Make directly - no wrapper, no cache, no free block mgt.
+ FileOps.delete(filename) ;
+ BlockAccess file = new BlockAccessDirect(filename, BlkSize) ;
+ BlockMgr mgr = new BlockMgrFileAccess(file, BlkSize) ;
+ if ( BlockMgrFactory.AddTracker )
+ mgr = BlockMgrFactory.tracker(mgr) ;
+ return mgr ;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMapped.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMapped.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMapped.java
new file mode 100644
index 0000000..6f8ef80
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMapped.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.block;
+
+import org.apache.jena.atlas.lib.FileOps ;
+import org.apache.jena.atlas.logging.LogCtl ;
+import org.apache.jena.dboe.ConfigTestDBOE;
+import org.apache.jena.dboe.base.block.BlockMgr;
+import org.apache.jena.dboe.base.block.BlockMgrFileAccess;
+import org.apache.jena.dboe.base.file.BlockAccess;
+import org.apache.jena.dboe.base.file.BlockAccessMapped;
+import org.junit.After ;
+import org.junit.AfterClass ;
+import org.junit.BeforeClass ;
+
+public class TestBlockMgrMapped extends AbstractTestBlockMgr
+{
+ static boolean logging = false ;
+
+ static { if ( logging ) LogCtl.setLog4j() ; }
+
+ static final String filename = ConfigTestDBOE.getTestingDir()+"/block-mgr" ;
+
+ // Windows is iffy about deleting memory mapped files.
+
+ @After public void after1() { clearBlockMgr() ; }
+
+ private void clearBlockMgr()
+ {
+ if ( blockMgr != null )
+ {
+ blockMgr.close() ;
+ FileOps.deleteSilent(filename) ;
+ blockMgr = null ;
+ }
+ }
+
+ @BeforeClass static public void remove1() { FileOps.deleteSilent(filename) ; }
+ @AfterClass static public void remove2() { FileOps.deleteSilent(filename) ; }
+
+ @Override
+ protected BlockMgr make()
+ {
+ clearBlockMgr() ;
+ BlockAccess file = new BlockAccessMapped(filename, BlkSize) ;
+ return new BlockMgrFileAccess(file, BlkSize) ;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMem.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMem.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMem.java
new file mode 100644
index 0000000..2f3cc8d
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrMem.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.block;
+
+import org.apache.jena.dboe.base.block.BlockMgr;
+import org.apache.jena.dboe.base.block.BlockMgrFactory;
+
+
+public class TestBlockMgrMem extends AbstractTestBlockMgr
+{
+ @Override
+ protected BlockMgr make()
+ { return BlockMgrFactory.createMem("mem", BlkSize) ; }
+
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrTracked.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrTracked.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrTracked.java
new file mode 100644
index 0000000..4f1c6ad
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/block/TestBlockMgrTracked.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.block;
+
+import java.nio.ByteBuffer ;
+
+import org.junit.AfterClass ;
+import org.junit.Assert ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+public class TestBlockMgrTracked extends Assert
+{
+ // Mainly testing the tracking
+
+ static boolean b ;
+
+ @BeforeClass
+ static public void beforeClass()
+ {
+ b = BlockMgrTracker.verbose ;
+ BlockMgrTracker.verbose = false ;
+ }
+
+ @AfterClass
+ static public void afterClass()
+ {
+ BlockMgrTracker.verbose = b ;
+ }
+
+ @Test public void track_01()
+ {
+ BlockMgr mgr = BlockMgrFactory.createMem("BPTRecord", 4) ;
+ mgr = BlockMgrFactory.tracker(mgr) ;
+ mgr.beginUpdate() ;
+ Block block = mgr.allocate(4) ;
+ ByteBuffer bb = block.getByteBuffer() ;
+ bb.putInt(0,1234) ;
+ mgr.write(block) ;
+ mgr.release(block) ;
+ // -----
+ Block block2 = mgr.getRead(block.getId()) ;
+ ByteBuffer bb2 = block2.getByteBuffer() ;
+ assertArrayEquals(bb.array(), bb2.array()) ;
+ mgr.release(block2) ;
+ mgr.endUpdate() ;
+ }
+
+ // Multiple overlapping read operations.
+ static BlockMgr setup()
+ {
+ BlockMgr mgr = BlockMgrFactory.createMem("BPTRecord", 4) ;
+ mgr = BlockMgrFactory.tracker(mgr) ;
+ return mgr ;
+ }
+
+ static void write(BlockMgr mgr, int value)
+ {
+ mgr.beginUpdate() ;
+ Block block = mgr.allocate(4) ;
+ ByteBuffer bb = block.getByteBuffer() ;
+ bb.putInt(0,value) ;
+ mgr.write(block) ;
+ mgr.release(block) ;
+ mgr.endUpdate() ;
+ }
+
+ @Test public void track_02()
+ {
+ BlockMgr mgr = setup() ;
+ write(mgr, 1234) ;
+ write(mgr, 5678) ;
+
+ mgr.beginRead() ;
+ mgr.beginRead() ;
+
+ Block b0 = mgr.getRead(0) ;
+ Block b1 = mgr.getRead(1) ;
+
+ mgr.release(b1) ;
+ mgr.release(b0) ;
+
+ mgr.endRead() ;
+ mgr.endRead() ;
+ }
+
+ @Test(expected=BlockException.class)
+ public void track_03()
+ {
+ BlockMgr mgr = setup() ;
+ write(mgr, 1234) ;
+ write(mgr, 5678) ;
+
+ mgr.beginRead() ;
+ Block b0 = mgr.getWrite(0) ;
+ mgr.endRead() ;
+ }
+
+ @Test(expected=BlockException.class)
+ public void track_04()
+ {
+ BlockMgr mgr = setup() ;
+ write(mgr, 1234) ;
+ mgr.beginRead() ;
+ Block b0 = mgr.getRead(0) ;
+ mgr.promote(b0) ;
+ mgr.endRead() ;
+ }
+
+ @Test(expected=BlockException.class)
+ public void track_05()
+ {
+ BlockMgr mgr = setup() ;
+ mgr.beginRead() ;
+ mgr.endUpdate() ;
+ }
+
+ @Test(expected=BlockException.class)
+ public void track_06()
+ {
+ BlockMgr mgr = setup() ;
+ mgr.beginUpdate() ;
+ mgr.endRead() ;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TS_Buffer.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TS_Buffer.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TS_Buffer.java
new file mode 100644
index 0000000..45e1a5e
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TS_Buffer.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.buffer;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+ TestRecordBuffer.class
+ , TestPtrBuffer.class
+})
+
+
+public class TS_Buffer
+{}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestPtrBuffer.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestPtrBuffer.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestPtrBuffer.java
new file mode 100644
index 0000000..47210bd
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestPtrBuffer.java
@@ -0,0 +1,318 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.buffer;
+
+import java.nio.ByteBuffer ;
+
+import org.apache.jena.dboe.base.buffer.BufferException;
+import org.apache.jena.dboe.base.buffer.PtrBuffer;
+import org.apache.jena.dboe.sys.SystemIndex;
+import org.junit.AfterClass ;
+import org.junit.Assert ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+public class TestPtrBuffer extends Assert
+{
+ static boolean originalNullOut ;
+ @BeforeClass static public void beforeClass()
+ {
+ originalNullOut = SystemIndex.getNullOut() ;
+ SystemIndex.setNullOut(true) ;
+ }
+
+ @AfterClass static public void afterClass()
+ {
+ SystemIndex.setNullOut(originalNullOut) ;
+ }
+
+ // Testing the test framework!
+ @Test public void ptrbuffer01()
+ {
+ PtrBuffer pb = make(4) ;
+ contains(pb, 2, 4, 6, 8) ;
+ }
+
+ // No BinarySearch test
+
+ // Shift at LHS
+ @Test public void ptrbuffer03()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+
+ pb.shiftUp(0) ;
+ pb.set(0, 99) ;
+ contains(pb, 99, 2, 4, 6, 8) ;
+
+ pb.shiftDown(0) ;
+ contains(pb, 2, 4, 6, 8) ;
+ }
+
+ @Test public void ptrbuffer04()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.shiftDown(0) ;
+
+ contains(pb, 4, 6, 8) ;
+ pb.shiftUp(0) ;
+
+ pb.set(0,1) ;
+ contains(pb, 1, 4, 6, 8) ;
+ }
+
+
+ // Shift at middle
+ @Test public void ptrbuffer05()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.shiftUp(2) ;
+ pb.set(2, 0) ;
+ contains(pb, 2, 4, 0, 6, 8) ;
+ pb.shiftDown(2) ;
+ contains(pb, 2, 4, 6, 8) ;
+ }
+
+ @Test public void ptrbuffer06()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.shiftDown(2) ;
+ contains(pb, 2, 4, 8) ;
+ pb.shiftUp(2) ;
+ assertTrue(pb.isClear(2)) ;
+ contains(pb, 2, 4, -1, 8) ;
+ }
+
+ // Shift RHS - out of bounds
+ @Test public void ptrbuffer07()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.shiftUp(3) ;
+ pb.set(3, 1) ;
+ contains(pb, 2, 4, 6, 1, 8) ;
+ pb.shiftDown(3) ;
+ contains(pb, 2, 4, 6, 8) ;
+ }
+
+ @Test public void ptrbuffer08()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.shiftDown(3) ;
+ contains(pb, 2, 4, 6) ;
+ pb.shiftUp(2) ;
+ contains(pb, 2, 4, -1, 6) ;
+ }
+
+ // Errors - IllegalArgumentException
+ @Test(expected=BufferException.class)
+ public void ptrbuffer09()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.shiftDown(4) ;
+ }
+
+ @Test(expected=BufferException.class)
+ public void ptrbuffer10()
+ {
+ PtrBuffer pb = make(4,5) ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.shiftUp(4) ;
+ }
+
+ @Test(expected=BufferException.class)
+ public void ptrbuffer11()
+ {
+ PtrBuffer pb = make(5,5) ;
+ contains(pb, 2, 4, 6, 8, 10) ;
+ pb.add(12) ;
+ }
+
+ // Copy, duplicate, clear
+ @Test public void ptrbuffer12()
+ {
+ PtrBuffer pb = make(5,5) ;
+ contains(pb, 2, 4, 6, 8, 10) ;
+ PtrBuffer pb2 = pb.duplicate() ;
+ pb2.set(1, 99) ;
+ contains(pb, 2, 4, 6, 8, 10) ;
+ contains(pb2, 2, 99, 6, 8, 10) ;
+ }
+
+ @Test public void ptrbuffer13()
+ {
+ PtrBuffer pb = make(5,5) ;
+ contains(pb, 2, 4, 6, 8, 10) ;
+ pb.clear(1, 3) ;
+ contains(pb, 2, -1, -1, -1, 10) ;
+ }
+
+ @Test public void ptrbuffer14()
+ {
+ PtrBuffer pb = make(5,5) ;
+ contains(pb, 2, 4, 6, 8, 10) ;
+
+ PtrBuffer pb2 = make(5,5) ;
+ contains(pb2, 2, 4, 6, 8, 10) ;
+
+ pb.copy(0, pb2, 1, 4) ;
+ contains(pb2, 2, 2, 4, 6, 8) ;
+ }
+
+ // Remove tests
+
+ @Test public void ptrbuffer15()
+ {
+ PtrBuffer pb = make(5,5) ;
+ contains(pb, 2, 4, 6, 8, 10) ;
+ pb.removeTop() ;
+ contains(pb, 2, 4, 6, 8) ;
+ pb.remove(1) ;
+ contains(pb, 2, 6, 8) ;
+ pb.remove(2) ;
+ contains(pb, 2, 6) ;
+ pb.remove(0) ;
+ contains(pb, 6) ;
+ pb.remove(0) ;
+ contains(pb) ;
+ }
+
+ @Test public void ptrbuffer20()
+ {
+ PtrBuffer pb1 = make(5,5) ;
+ contains(pb1, 2, 4, 6, 8, 10) ;
+ PtrBuffer pb2 = make(0,5) ;
+ contains(pb2) ;
+
+ pb1.shiftRight(pb2) ;
+ contains(pb1, 2, 4, 6, 8) ;
+ contains(pb2, 10) ;
+ }
+
+ @Test public void ptrbuffer21()
+ {
+ PtrBuffer pb1 = make(3,5) ;
+ contains(pb1, 2, 4, 6) ;
+ PtrBuffer pb2 = make(0,5) ;
+ contains(pb2) ;
+
+ pb1.shiftRight(pb2) ;
+ contains(pb1, 2, 4) ;
+ contains(pb2, 6) ;
+ }
+
+ @Test public void ptrbuffer22()
+ {
+ PtrBuffer pb1 = make(3,5) ;
+ contains(pb1, 2, 4, 6) ;
+ PtrBuffer pb2 = make(2,5) ;
+ contains(pb2, 2, 4) ;
+
+ pb1.shiftRight(pb2) ;
+ contains(pb1, 2, 4) ;
+ contains(pb2, 6, 2, 4) ;
+ }
+
+ @Test public void ptrbuffer24()
+ {
+ PtrBuffer pb1 = make(0,5) ;
+ contains(pb1) ;
+ PtrBuffer pb2 = make(5,5) ;
+ contains(pb2, 2, 4, 6, 8, 10) ;
+
+ pb1.shiftLeft(pb2) ;
+ contains(pb1, 2) ;
+ contains(pb2, 4, 6, 8, 10) ;
+ }
+
+ @Test public void ptrbuffer25()
+ {
+ PtrBuffer pb1 = make(0,5) ;
+ contains(pb1) ;
+ PtrBuffer pb2 = make(3,5) ;
+ contains(pb2, 2, 4, 6) ;
+
+ pb1.shiftLeft(pb2) ;
+ contains(pb1, 2) ;
+ contains(pb2, 4, 6) ;
+ }
+
+ @Test public void ptrbuffer26()
+ {
+ PtrBuffer pb1 = make(2,5) ;
+ contains(pb1, 2, 4) ;
+ PtrBuffer pb2 = make(3,5) ;
+ contains(pb2, 2, 4, 6) ;
+
+ pb1.shiftLeft(pb2) ;
+ contains(pb1, 2, 4, 2) ;
+ contains(pb2, 4, 6) ;
+ }
+
+ @Test public void ptrbuffer27()
+ {
+ PtrBuffer pb1 = make(2,4) ;
+ PtrBuffer pb2 = make(2,4) ;
+ pb1.copyToTop(pb2) ;
+ contains(pb2, 2,4,2,4) ;
+ }
+
+ @Test public void ptrbuffer28()
+ {
+ PtrBuffer pb1 = make(0,5) ;
+ PtrBuffer pb2 = make(2,4) ;
+ pb1.copyToTop(pb2) ;
+ contains(pb2, 2,4) ;
+ }
+
+ @Test public void ptrbuffer29()
+ {
+ PtrBuffer pb1 = make(0,5) ;
+ PtrBuffer pb2 = make(2,4) ;
+ pb2.copyToTop(pb1) ;
+ contains(pb1, 2,4) ;
+ }
+
+ // ---- Support
+ private static void contains(PtrBuffer pb, int... vals)
+ {
+ assertEquals("Length mismatch: ", vals.length, pb.size()) ;
+ for ( int i = 0 ; i < vals.length ; i++ )
+ if ( vals[i] == -1 )
+ assertTrue(pb.isClear(i)) ;
+ else
+ assertEquals("Value mismatch: ", vals[i], pb.get(i)) ;
+ }
+
+ // Make : 2,4,6,8, ..
+ private static PtrBuffer make(int n) { return make(n,n) ; }
+ private static PtrBuffer make(int n, int len)
+ {
+ ByteBuffer bb = ByteBuffer.allocate(4*len) ;
+ PtrBuffer pb = new PtrBuffer(bb, 0) ;
+ for ( int i = 0 ; i < n ; i++ )
+ pb.add(2+2*i) ;
+ return pb ;
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/3d456654/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestRecordBuffer.java
----------------------------------------------------------------------
diff --git a/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestRecordBuffer.java b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestRecordBuffer.java
new file mode 100644
index 0000000..9325cc5
--- /dev/null
+++ b/jena-db/jena-dboe-base/src/test/java/org/apache/jena/dboe/base/buffer/TestRecordBuffer.java
@@ -0,0 +1,346 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.dboe.base.buffer;
+
+import static org.apache.jena.dboe.test.RecordLib.intToRecord;
+import static org.apache.jena.dboe.test.RecordLib.r;
+
+import java.util.Iterator ;
+import java.util.List ;
+
+import org.junit.Assert ;
+import org.apache.jena.dboe.base.buffer.BufferException;
+import org.apache.jena.dboe.base.buffer.RecordBuffer;
+import org.apache.jena.dboe.base.record.Record;
+import org.apache.jena.dboe.base.record.RecordFactory;
+import org.apache.jena.dboe.sys.SystemIndex;
+import org.apache.jena.dboe.test.RecordLib;
+import org.junit.AfterClass ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+public class TestRecordBuffer extends Assert
+{
+ static RecordFactory recordFactory = new RecordFactory(RecordLib.TestRecordLength, 0) ;
+
+ static boolean originalNullOut ;
+ @BeforeClass static public void beforeClass()
+ {
+ originalNullOut = SystemIndex.getNullOut() ;
+ SystemIndex.setNullOut(true) ;
+ }
+
+ @AfterClass static public void afterClass()
+ {
+ SystemIndex.setNullOut(originalNullOut) ;
+ }
+
+ @Test public void recBuffer01()
+ {
+ RecordBuffer rb = make(4, 4) ;
+ contains(rb, 2, 4, 6, 8) ;
+ }
+
+ @Test public void recBuffer02()
+ {
+ RecordBuffer rb = make(4, 4) ;
+ int idx = -1 ;
+ idx = find(rb, 6) ;
+ assertEquals(2, idx) ;
+ idx = find(rb, 8) ;
+
+ assertEquals(3, idx) ;
+ idx = find(rb, 4) ;
+ assertEquals(1, idx) ;
+ idx = find(rb, 2) ;
+ assertEquals(0, idx) ;
+
+ idx = find(rb, 3) ;
+ assertEquals(-2, idx) ;
+ idx = find(rb, 0) ;
+ assertEquals(-1, idx) ;
+ idx = find(rb, 10) ;
+ assertEquals(-5, idx) ;
+ }
+
+ // Shift at LHS
+ @Test public void recBuffer03()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftUp(0) ;
+ rb.set(0, r(0)) ;
+ contains(rb, 0, 2, 4, 6, 8) ;
+ rb.shiftDown(0) ;
+ contains(rb, 2, 4, 6, 8) ;
+ }
+
+ @Test public void recBuffer04()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftDown(0) ;
+
+ contains(rb, 4, 6, 8) ;
+ rb.shiftUp(0) ;
+
+ rb.set(0,r(1)) ;
+ contains(rb, 1, 4, 6, 8) ;
+ }
+
+
+ // Shift at middle
+ @Test public void recBuffer05()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftUp(2) ;
+ rb.set(2, r(0)) ;
+ contains(rb, 2, 4, 0, 6, 8) ;
+ rb.shiftDown(2) ;
+ contains(rb, 2, 4, 6, 8) ;
+ }
+
+ @Test public void recBuffer06()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftDown(2) ;
+ contains(rb, 2, 4, 8) ;
+ rb.shiftUp(2) ;
+ contains(rb, 2, 4, -1, 8) ;
+ }
+
+ // Shift RHS - out of bounds
+ @Test public void recBuffer07()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftUp(3) ;
+ rb.set(3, r(1)) ;
+ contains(rb, 2, 4, 6, 1, 8) ;
+ rb.shiftDown(3) ;
+ contains(rb, 2, 4, 6, 8) ;
+ }
+
+ @Test public void recBuffer08()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftDown(3) ;
+ contains(rb, 2, 4, 6) ;
+ rb.shiftUp(2) ;
+ contains(rb, 2, 4, -1, 6) ;
+ }
+
+ // Errors
+
+ @Test(expected=BufferException.class)
+ public void recBuffer09()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftDown(4) ;
+ }
+
+ @Test(expected=BufferException.class)
+ public void recBuffer10()
+ {
+ RecordBuffer rb = make(4,5) ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.shiftUp(4) ;
+ }
+
+ @Test(expected=BufferException.class)
+ public void recBuffer11()
+ {
+ RecordBuffer rb = make(5,5) ;
+ contains(rb, 2, 4, 6, 8, 10) ;
+ rb.add(r(12)) ;
+ }
+
+ // Copy, duplicate, clear
+ @Test public void recBuffer12()
+ {
+ RecordBuffer rb = make(5,5) ;
+ contains(rb, 2, 4, 6, 8, 10) ;
+ RecordBuffer rb2 = rb.duplicate() ;
+ rb2.set(1, r(99)) ;
+ contains(rb, 2, 4, 6, 8, 10) ;
+ contains(rb2, 2, 99, 6, 8, 10) ;
+ }
+
+ @Test public void recBuffer13()
+ {
+ RecordBuffer rb = make(5,5) ;
+ contains(rb, 2, 4, 6, 8, 10) ;
+ rb.clear(1, 3) ;
+ contains(rb, 2, -1, -1, -1, 10) ;
+ }
+
+ @Test public void recBuffer14()
+ {
+ RecordBuffer rb = make(5,5) ;
+ contains(rb, 2, 4, 6, 8, 10) ;
+ RecordBuffer rb2 = make(5,5) ;
+ contains(rb2, 2, 4, 6, 8, 10) ;
+ rb.copy(0, rb2, 1, 4) ;
+ contains(rb2, 2, 2, 4, 6, 8) ;
+ }
+
+ // Remove tests
+
+ @Test public void recBuffer15()
+ {
+ RecordBuffer rb = make(5,5) ;
+ contains(rb, 2, 4, 6, 8, 10) ;
+ rb.removeTop() ;
+ contains(rb, 2, 4, 6, 8) ;
+ rb.remove(1) ;
+ contains(rb, 2, 6, 8) ;
+ rb.remove(2) ;
+ contains(rb, 2, 6) ;
+ rb.remove(0) ;
+ contains(rb, 6) ;
+ rb.remove(0) ;
+ contains(rb) ;
+ }
+
+ @Test public void recBufferIterate01()
+ {
+ RecordBuffer rb = make(5,5) ;
+ same(rb.iterator(), 2,4,6,8,10) ;
+ }
+
+ @Test public void recBufferIterate02()
+ {
+ RecordBuffer rb = make(3,5) ;
+ Iterator<Record> iter = rb.iterator() ;
+ same(iter, 2, 4, 6) ;
+ }
+
+ @Test public void recBufferIterate03()
+ {
+ RecordBuffer rb = make(3,5) ;
+ Iterator<Record> iter = rb.iterator( intToRecord(4), null) ;
+ same(iter, 4, 6) ;
+ }
+
+ @Test public void recBufferIterate04()
+ {
+ RecordBuffer rb = make(3,5) ;
+ Iterator<Record> iter = rb.iterator( intToRecord(3), null) ;
+ same(iter, 4, 6) ;
+ }
+
+ @Test public void recBufferIterate05()
+ {
+ RecordBuffer rb = make(3,5) ;
+ Iterator<Record> iter = rb.iterator( intToRecord(1), null) ;
+ same(iter, 2, 4, 6) ;
+ }
+
+ @Test public void recBufferIterate06()
+ {
+ RecordBuffer rb = make(3,5) ;
+ Iterator<Record> iter = rb.iterator( null, intToRecord(1)) ;
+ same(iter) ;
+ }
+
+ @Test public void recBufferIterate07()
+ {
+ RecordBuffer rb = make(3,5) ;
+ Iterator<Record> iter = rb.iterator( null, intToRecord(2)) ;
+ same(iter ) ;
+ }
+
+ @Test public void recBufferIterate08()
+ {
+ RecordBuffer rb = make(3,5) ;
+ Iterator<Record> iter = rb.iterator( null, intToRecord(3)) ;
+ same(iter,2 ) ;
+ }
+
+ @Test public void recBufferIterate09()
+ {
+ RecordBuffer rb = make(5,5) ;
+ Iterator<Record> iter = rb.iterator( null, intToRecord(99)) ;
+ same(iter, 2, 4, 6, 8, 10) ;
+ }
+
+ @Test public void recBufferIterate10()
+ {
+ RecordBuffer rb = make(5,5) ;
+ Iterator<Record> iter = rb.iterator( intToRecord(4), intToRecord(8)) ;
+ same(iter, 4, 6 ) ;
+ }
+
+ @Test public void recBufferIterate11()
+ {
+ RecordBuffer rb = make(5,5) ;
+ Iterator<Record> iter = rb.iterator( intToRecord(3), intToRecord(9)) ;
+ same(iter, 4, 6, 8 ) ;
+ }
+
+ // ---- Support
+ private static void contains(RecordBuffer rb, int... vals)
+ {
+ assertEquals("Length mismatch: ", vals.length, rb.size()) ;
+
+ for ( int i = 0 ; i < vals.length ; i++ )
+ if ( vals[i] == -1 )
+ assertTrue(rb.isClear(i)) ;
+ else
+ {
+ Record r = RecordLib.intToRecord(vals[i]) ;
+ Record r2 = rb.get(i) ;
+ int x = RecordLib.recordToInt(r2) ;
+ assertEquals("Value mismatch: ", vals[i], x) ;
+ }
+ }
+
+ private static void same(Iterator<Record> iter, int... vals)
+ {
+ List<Integer> list = RecordLib.toIntList(iter) ;
+ assertEquals("Length mismatch: ", vals.length, list.size()) ;
+
+ for ( int i = 0 ; i < vals.length ; i++ )
+ {
+ int x = list.get(i) ;
+ assertEquals("Value mismatch: ", vals[i], x) ;
+ }
+ }
+
+
+ public int find(RecordBuffer rb, int v)
+ {
+ return rb.find(r(v)) ;
+ }
+
+ private static RecordBuffer make(int n, int len)
+ {
+ RecordBuffer rb = new RecordBuffer(recordFactory, len) ;
+ for ( int i = 0 ; i < n ; i++ )
+ {
+ Record r = RecordLib.intToRecord(2*i+2) ;
+ rb.add(r) ;
+ }
+ return rb ;
+ }
+}