You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ma...@apache.org on 2015/11/23 21:48:51 UTC
[21/50] [abbrv] incubator-geode git commit: GEODE-544: Removes soplog
code and tests
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplog.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplog.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplog.java
deleted file mode 100644
index 8995f66..0000000
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplog.java
+++ /dev/null
@@ -1,244 +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 com.gemstone.gemfire.internal.cache.persistence.soplog.nofile;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.NavigableMap;
-import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.atomic.AtomicReference;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.AbstractSortedReader;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedBuffer.BufferIterator;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplog;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplogFactory.SortedOplogConfiguration;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.Metadata;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SortedStatistics;
-
-public class NoFileSortedOplog implements SortedOplog {
- private final SortedOplogConfiguration config;
-
- private final AtomicReference<NavigableMap<byte[], byte[]>> data;
- private final EnumMap<Metadata, byte[]> metadata;
- private final NoFileStatistics stats;
-
- public NoFileSortedOplog(SortedOplogConfiguration config) {
- this.config = config;
-
- data = new AtomicReference<NavigableMap<byte[],byte[]>>();
- metadata = new EnumMap<Metadata, byte[]>(Metadata.class);
- stats = new NoFileStatistics();
- }
-
- @Override
- public SortedOplogReader createReader() throws IOException {
- return new NoFileReader();
- }
-
- @Override
- public SortedOplogWriter createWriter() throws IOException {
- synchronized (metadata) {
- metadata.clear();
- }
- data.set(new ConcurrentSkipListMap<byte[], byte[]>(config.getComparator()));
-
- return new NoFileWriter();
- }
-
- private class NoFileWriter implements SortedOplogWriter {
- @Override
- public void append(byte[] key, byte[] value) throws IOException {
- if (data.get().put(key, value) == null) {
- stats.add(key.length, value.length);
- }
- }
-
- @Override
- public void append(ByteBuffer key, ByteBuffer value) throws IOException {
- byte[] k = new byte[key.remaining()];
- byte[] v = new byte[value.remaining()];
-
- key.get(k);
- value.get(v);
-
- append(k, v);
- }
-
- @Override
- public void close(EnumMap<Metadata, byte[]> meta) throws IOException {
- if (meta != null) {
- synchronized (metadata) {
- metadata.putAll(meta);
- }
- }
- }
-
- @Override
- public void closeAndDelete() throws IOException {
- data.get().clear();
- data.set(null);
- }
- }
-
- private class NoFileReader extends AbstractSortedReader implements SortedOplogReader {
- private final BloomFilter bloom;
- private volatile boolean closed;
-
- public NoFileReader() {
- closed = false;
- bloom = new BloomFilter() {
- @Override
- public boolean mightContain(byte[] key) {
- return data.get().containsKey(key);
- }
- };
- }
-
- @Override
- public boolean mightContain(byte[] key) throws IOException {
- return bloom.mightContain(key);
- }
-
- @Override
- public ByteBuffer read(byte[] key) throws IOException {
- return ByteBuffer.wrap(data.get().get(key));
- }
-
- @Override
- public SortedIterator<ByteBuffer> scan(
- byte[] from, boolean fromInclusive,
- byte[] to, boolean toInclusive,
- boolean ascending,
- MetadataFilter filter) {
-
- if (filter == null || filter.accept(metadata.get(filter.getName()))) {
- NavigableMap<byte[],byte[]> subset = ascending ? data.get() : data.get().descendingMap();
- if (from == null && to == null) {
- // we're good
- } else if (from == null) {
- subset = subset.headMap(to, toInclusive);
- } else if (to == null) {
- subset = subset.tailMap(from, fromInclusive);
- } else {
- subset = subset.subMap(from, fromInclusive, to, toInclusive);
- }
- return new BufferIterator(subset.entrySet().iterator());
- }
- return new BufferIterator(Collections.<byte[], byte[]>emptyMap().entrySet().iterator());
- }
-
- @Override
- public SerializedComparator getComparator() {
- return (SerializedComparator) data.get().comparator();
- }
-
- @Override
- public SortedStatistics getStatistics() {
- return stats;
- }
-
- @Override
- public boolean isClosed() {
- return closed;
- }
-
- @Override
- public void close() throws IOException {
- closed = true;
- }
-
- @Override
- public BloomFilter getBloomFilter() {
- return bloom;
- }
-
- @Override
- public byte[] getMetadata(Metadata name) {
- synchronized (metadata) {
- return metadata.get(name);
- }
- }
-
- @Override
- public File getFile() {
- return new File(".");
- }
-
- @Override
- public String getFileName() {
- return "name";
- }
-
- @Override
- public long getModificationTimeStamp() throws IOException {
- return 0;
- }
-
- @Override
- public void rename(String name) throws IOException {
- }
-
- @Override
- public void delete() throws IOException {
- }
- }
-
- private class NoFileStatistics implements SortedStatistics {
- private long keys;
- private double avgKeySize;
- private double avgValueSize;
-
- private synchronized void add(int keyLength, int valueLength) {
- avgKeySize = (keyLength + keys * avgKeySize) / (keys + 1);
- avgValueSize = (keyLength + keys * avgValueSize) / (keys + 1);
-
- keys++;
- }
-
- @Override
- public synchronized long keyCount() {
- return keys;
- }
-
- @Override
- public byte[] firstKey() {
- return data.get().firstKey();
- }
-
- @Override
- public byte[] lastKey() {
- return data.get().lastKey();
- }
-
- @Override
- public synchronized double avgKeySize() {
- return avgKeySize;
- }
-
- @Override
- public synchronized double avgValueSize() {
- return avgValueSize;
- }
-
- @Override
- public void close() {
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogFactory.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogFactory.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogFactory.java
deleted file mode 100644
index 365d796..0000000
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogFactory.java
+++ /dev/null
@@ -1,41 +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 com.gemstone.gemfire.internal.cache.persistence.soplog.nofile;
-
-import java.io.File;
-import java.io.IOException;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplog;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplogFactory;
-
-public class NoFileSortedOplogFactory implements SortedOplogFactory {
- private final SortedOplogConfiguration config;
-
- public NoFileSortedOplogFactory(String name) {
- config = new SortedOplogConfiguration(name);
- }
-
- @Override
- public SortedOplog createSortedOplog(File name) throws IOException {
- return new NoFileSortedOplog(config);
- }
-
- @Override
- public SortedOplogConfiguration getConfiguration() {
- return config;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/AppendLog.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/AppendLog.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/AppendLog.java
deleted file mode 100644
index e0e696a..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/AppendLog.java
+++ /dev/null
@@ -1,65 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.BufferedOutputStream;
-import java.io.Closeable;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-public class AppendLog {
-
- public static AppendLogReader recover(File f) throws IOException {
- throw new RuntimeException("Not implemented");
- }
-
- public static AppendLogWriter create(File f) throws IOException {
- DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
- return new AppendLogWriter(f, dos);
- }
-
- public static class AppendLogReader {
- }
-
- public static class AppendLogWriter implements Closeable {
- private final File file;
- private final DataOutputStream out;
-
- private AppendLogWriter(File f, DataOutputStream out) {
- this.file = f;
- this.out = out;
- }
-
- public synchronized void append(byte[] key, byte[] value) throws IOException {
- out.writeInt(key.length);
- out.writeInt(value.length);
- out.write(key);
- out.write(value);
- }
-
- @Override
- public void close() throws IOException {
- out.close();
- }
-
- public File getFile() {
- return file;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ArraySerializedComparatorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ArraySerializedComparatorJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ArraySerializedComparatorJUnitTest.java
deleted file mode 100644
index 3689255..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ArraySerializedComparatorJUnitTest.java
+++ /dev/null
@@ -1,95 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SerializedComparator;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class ArraySerializedComparatorJUnitTest extends ComparisonTestCase {
- protected ArraySerializedComparator comp;
-
- public void testSearch() throws IOException {
- byte[] k1 = comp.createCompositeKey(convert("aaaa"), convert(1), convert(true));
- byte[] k2 = comp.createCompositeKey(convert("bbbb"), convert(2), convert(false));
- byte[] k3 = comp.createCompositeKey(convert("bbbb"), convert(3), convert(true));
- byte[] k4 = comp.createCompositeKey(convert("cccc"), convert(1), convert(false));
-
- byte[] s1 = comp.createCompositeKey(convert("aaaa"),
- new byte[] {SoplogToken.WILDCARD.toByte()}, new byte[] {SoplogToken.WILDCARD.toByte()});
-
-
- byte[] s2 = comp.createCompositeKey(convert("bbbb"),
- new byte[] {SoplogToken.WILDCARD.toByte()}, new byte[] {SoplogToken.WILDCARD.toByte()});
-
- byte[] s3 = comp.createCompositeKey(new byte[] {SoplogToken.WILDCARD.toByte()}, convert(1),
- new byte[] {SoplogToken.WILDCARD.toByte()});
-
- compareAsIs(comp, k1, s1, Comparison.EQ);
- compareAsIs(comp, k2, s1, Comparison.GT);
- compareAsIs(comp, k1, s2, Comparison.LT);
- compareAsIs(comp, k2, s2, Comparison.EQ);
- compareAsIs(comp, k3, s2, Comparison.EQ);
- compareAsIs(comp, k4, s2, Comparison.GT);
- compareAsIs(comp, s3, k4, Comparison.EQ);
- }
-
- public void testCompositeKey() throws IOException {
- byte[] k1 = comp.createCompositeKey(convert("aaaa"), convert(1), convert(true));
- byte[] k2 = comp.createCompositeKey(convert("bbbb"), convert(2), convert(false));
- byte[] k3 = comp.createCompositeKey(convert("bbbb"), convert(3), convert(true));
- byte[] k4 = comp.createCompositeKey(convert("cccc"), convert(1), convert(false));
- byte[] k5 = comp.createCompositeKey(convert(null), convert(1), convert(false));
- byte[] k6 = comp.createCompositeKey(convert(null), convert(1), convert(true));
-
- compareAsIs(comp, k1, k1, Comparison.EQ);
- compareAsIs(comp, k1, k2, Comparison.LT);
- compareAsIs(comp, k2, k1, Comparison.GT);
- compareAsIs(comp, k2, k3, Comparison.LT);
- compareAsIs(comp, k3, k4, Comparison.LT);
-
- compareAsIs(comp, k4, k5, Comparison.LT);
- compareAsIs(comp, k5, k1, Comparison.GT);
- compareAsIs(comp, k5, k6, Comparison.LT);
- }
-
- public void testGetKey() throws Exception {
- Object[] vals = new Object[] { "aaaa", 1, true };
-
- byte[][] composite = new byte[][] { convert(vals[0]), convert(vals[1]), convert(vals[2]) };
- ByteBuffer key = ByteBuffer.wrap(comp.createCompositeKey(composite));
-
- for (int i = 0; i < 3; i++) {
- ByteBuffer subkey = comp.getKey(key, i);
- assertEquals(vals[i], recover(subkey.array(), subkey.arrayOffset(), subkey.remaining()));
- }
- }
-
- public void setUp() {
- comp = new ArraySerializedComparator();
- comp.setComparators(new SerializedComparator[] {
- new LexicographicalComparator(), // string
- new LexicographicalComparator(), // int
- new LexicographicalComparator() // boolean
- });
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionSortedOplogSetTestCase.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionSortedOplogSetTestCase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionSortedOplogSetTestCase.java
deleted file mode 100644
index bca52a9..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionSortedOplogSetTestCase.java
+++ /dev/null
@@ -1,134 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.concurrent.Executors;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.CompactionTestCase.FileTracker;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.CompactionTestCase.WaitingHandler;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SortedIterator;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.nofile.NoFileSortedOplogFactory;
-
-public abstract class CompactionSortedOplogSetTestCase extends SortedOplogSetJUnitTest {
- public void testWithCompaction() throws IOException, InterruptedException {
- FlushCounter handler = new FlushCounter();
- SortedOplogSet sos = createSoplogSet("compact");
-
- for (int i = 0; i < 1000; i++) {
- sos.put(wrapInt(i), wrapInt(i));
- if (i % 100 == 0) {
- sos.flush(null, handler);
- }
- }
-
- flushAndWait(handler, sos);
-
- compactAndWait(sos, false);
- validate(sos, 1000);
- sos.close();
- }
-
- public void testTombstone() throws Exception {
- FlushCounter handler = new FlushCounter();
- SortedOplogFactory factory = new NoFileSortedOplogFactory("tombstone");
- Compactor compactor = new SizeTieredCompactor(factory,
- NonCompactor.createFileset("tombstone", new File(".")),
- new FileTracker(),
- Executors.newSingleThreadExecutor(),
- 2, 2);
-
- SortedOplogSet sos = new SortedOplogSetImpl(factory, Executors.newSingleThreadExecutor(), compactor);
-
- for (int i = 0; i < 1000; i++) {
- sos.put(wrapInt(i), wrapInt(i));
- }
- sos.flush(null, handler);
-
- for (int i = 900; i < 1000; i++) {
- sos.put(wrapInt(i), new byte[] {SoplogToken.TOMBSTONE.toByte()});
- }
- flushAndWait(handler, sos);
- compactAndWait(sos, true);
-
- validate(sos, 900);
- sos.close();
-
- }
-
- public void testInUse() throws Exception {
- FlushCounter handler = new FlushCounter();
- SortedOplogSet sos = createSoplogSet("inuse");
-
- for (int i = 0; i < 1000; i++) {
- sos.put(wrapInt(i), wrapInt(i));
- }
-
- flushAndWait(handler, sos);
-
- // start iterating over soplog
- SortedIterator<ByteBuffer> range = sos.scan();
- assertEquals(0, ((SizeTieredCompactor) sos.getCompactor()).countInactiveReaders());
-
- for (int i = 1000; i < 5000; i++) {
- sos.put(wrapInt(i), wrapInt(i));
- if (i % 100 == 0) {
- sos.flush(null, handler);
- }
- }
-
- flushAndWait(handler, sos);
- compactAndWait(sos, false);
- assertEquals(1, ((SizeTieredCompactor) sos.getCompactor()).countInactiveReaders());
-
- range.close();
- compactAndWait(sos, false);
- assertEquals(0, ((SizeTieredCompactor) sos.getCompactor()).countInactiveReaders());
-
- validate(sos, 5000);
- sos.close();
- }
-
- @Override
- protected SortedOplogSetImpl createSoplogSet(String name) throws IOException {
- SortedOplogFactory factory = new NoFileSortedOplogFactory(name);
- Compactor compactor = createCompactor(factory);
-
- return new SortedOplogSetImpl(factory, Executors.newSingleThreadExecutor(), compactor);
- }
-
- protected abstract AbstractCompactor<?> createCompactor(SortedOplogFactory factory) throws IOException;
-
- private void validate(SortedReader<ByteBuffer> range, int count) throws IOException {
- int i = 0;
- for (SortedIterator<ByteBuffer> iter = range.scan(); iter.hasNext(); i++) {
- iter.next();
- assertEquals(i, iter.key().getInt());
- }
- assertEquals(count, i);
- range.close();
- }
-
- private void compactAndWait(SortedOplogSet sos, boolean force) throws InterruptedException {
- WaitingHandler wh = new WaitingHandler();
- sos.getCompactor().compact(force, wh);
- wh.waitForCompletion();
- assertNull(wh.getError());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionTestCase.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionTestCase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionTestCase.java
deleted file mode 100644
index 7577b53..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CompactionTestCase.java
+++ /dev/null
@@ -1,206 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.logging.log4j.Logger;
-
-import junit.framework.TestCase;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.Compactor.CompactionHandler;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.Compactor.CompactionTracker;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplog.SortedOplogWriter;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.nofile.NoFileSortedOplogFactory;
-import com.gemstone.gemfire.internal.logging.LogService;
-
-public abstract class CompactionTestCase<T extends Comparable<T>> extends TestCase {
- private static final Logger logger = LogService.getLogger();
- protected SortedOplogFactory factory;
- protected AbstractCompactor<T> compactor;
-
- public void testMaxCompaction() throws Exception {
- for (int i = 0; i < 100; i += 2) {
- compactor.add(createSoplog(0, 100, i));
- compactor.add(createSoplog(100, 100, i+1));
-
- WaitingHandler wh = new WaitingHandler();
- compactor.compact(false, wh);
- wh.waitForCompletion();
- }
-
- WaitingHandler wh = new WaitingHandler();
- compactor.compact(true, wh);
- wh.waitForCompletion();
- }
-
- public void testClear() throws IOException {
- compactor.add(createSoplog(0, 100, 0));
- compactor.add(createSoplog(100, 100, 1));
- compactor.clear();
-
- assertEquals(0, compactor.getActiveReaders(null, null).size());
- assertFalse(compactor.getLevel(0).needsCompaction());
- }
-
- public void testInterruptedCompaction() throws IOException {
- compactor.add(createSoplog(0, 100, 0));
- compactor.add(createSoplog(100, 100, 1));
-
- compactor.testAbortDuringCompaction = true;
- boolean compacted = compactor.compact();
-
- assertFalse(compacted);
- assertEquals(2, compactor.getActiveReaders(null, null).size());
- assertTrue(compactor.getLevel(0).needsCompaction());
- }
-
- public void testClearDuringCompaction() throws Exception {
- compactor.add(createSoplog(0, 100, 0));
- compactor.add(createSoplog(100, 100, 1));
-
- compactor.testDelayDuringCompaction = new CountDownLatch(1);
- WaitingHandler wh = new WaitingHandler();
-
- logger.debug("Invoking compact");
- compactor.compact(false, wh);
-
- logger.debug("Invoking clear");
- compactor.clear();
-
- boolean compacted = wh.waitForCompletion();
-
- assertFalse(compacted);
- assertEquals(0, compactor.getActiveReaders(null, null).size());
- }
-
- public void testClearRepeat() throws Exception {
- int i = 0;
- do {
- testClearDuringCompaction();
- logger.debug("Test {} is complete", i);
- tearDown();
- setUp();
- } while (i++ < 100);
- }
-
- public void testCloseRepeat() throws Exception {
- int i = 0;
- do {
- testCloseDuringCompaction();
- logger.debug("Test {} is complete", i);
- tearDown();
- setUp();
- } while (i++ < 100);
- }
-
- public void testCloseDuringCompaction() throws Exception {
- compactor.add(createSoplog(0, 100, 0));
- compactor.add(createSoplog(100, 100, 1));
-
- compactor.testDelayDuringCompaction = new CountDownLatch(1);
- WaitingHandler wh = new WaitingHandler();
-
- compactor.compact(false, wh);
- compactor.close();
-
- boolean compacted = wh.waitForCompletion();
-
- assertFalse(compacted);
- assertEquals(0, compactor.getActiveReaders(null, null).size());
- }
-
- public void setUp() throws IOException {
- factory = new NoFileSortedOplogFactory("test");
- compactor = createCompactor(factory);
- }
-
- public void tearDown() throws Exception {
- compactor.close();
- for (File f : SortedReaderTestCase.getSoplogsToDelete()) {
- f.delete();
- }
- }
-
- protected SortedOplog createSoplog(int start, int count, int id) throws IOException {
- SortedOplog soplog = factory.createSortedOplog(new File("test-" + id + ".soplog"));
- SortedOplogWriter wtr = soplog.createWriter();
- try {
- for (int i = start; i < start + count; i++) {
- wtr.append(SortedReaderTestCase.wrapInt(i), SortedReaderTestCase.wrapInt(i));
- }
- } finally {
- wtr.close(null);
- }
- return soplog;
- }
-
- protected abstract AbstractCompactor<T> createCompactor(SortedOplogFactory factory) throws IOException;
-
- static class WaitingHandler implements CompactionHandler {
- private final CountDownLatch latch;
- private final AtomicReference<Throwable> err;
- private volatile boolean compacted;
-
- public WaitingHandler() {
- latch = new CountDownLatch(1);
- err = new AtomicReference<Throwable>();
- }
-
- public boolean waitForCompletion() throws InterruptedException {
- logger.debug("Waiting for compaction to complete");
- latch.await();
- logger.debug("Done waiting!");
-
- return compacted;
- }
-
- public Throwable getError() {
- return err.get();
- }
-
- @Override
- public void complete(boolean compacted) {
- logger.debug("Compaction completed with {}", compacted);
- this.compacted = compacted;
- latch.countDown();
- }
-
- @Override
- public void failed(Throwable ex) {
- err.set(ex);
- latch.countDown();
- }
- }
-
- static class FileTracker implements CompactionTracker<Integer> {
- @Override
- public void fileDeleted(File f) {
- }
-
- @Override
- public void fileAdded(File f, Integer attach) {
- }
-
- @Override
- public void fileRemoved(File f, Integer attach) {
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ComparisonTestCase.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ComparisonTestCase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ComparisonTestCase.java
deleted file mode 100644
index cb9e909..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ComparisonTestCase.java
+++ /dev/null
@@ -1,77 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import junit.framework.TestCase;
-
-import com.gemstone.gemfire.DataSerializer;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SerializedComparator;
-
-public abstract class ComparisonTestCase extends TestCase {
- public enum Comparison {
- EQ(0.0),
- LT(-1.0),
- GT(1.0);
-
- private final double sgn;
-
- private Comparison(double sgn) {
- this.sgn = sgn;
- }
-
- public double signum() {
- return sgn;
- }
-
- public Comparison opposite() {
- switch (this) {
- case LT: return GT;
- case GT : return LT;
- default : return EQ;
- }
- }
- }
-
- public void compare(SerializedComparator sc, Object o1, Object o2, Comparison result) throws IOException {
- double diff = sc.compare(convert(o1), convert(o2));
- assertEquals(String.format("%s ? %s", o1, o2), result.signum(), Math.signum(diff));
- }
-
- public void compareAsIs(SerializedComparator sc, byte[] b1, byte[] b2, Comparison result) throws IOException {
- double diff = sc.compare(b1, b2);
- assertEquals(result.signum(), Math.signum(diff));
- }
-
- public static byte[] convert(Object o) throws IOException {
- ByteArrayOutputStream b = new ByteArrayOutputStream();
- DataOutputStream d = new DataOutputStream(b);
- DataSerializer.writeObject(o, d);
-
- return b.toByteArray();
- }
-
- public static Object recover(byte[] obj, int off, int len) throws ClassNotFoundException, IOException {
- DataInputStream in = new DataInputStream(new ByteArrayInputStream(obj, off, len));
- return DataSerializer.readObject(in);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/IndexComparatorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/IndexComparatorJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/IndexComparatorJUnitTest.java
deleted file mode 100644
index 27202ec..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/IndexComparatorJUnitTest.java
+++ /dev/null
@@ -1,79 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class IndexComparatorJUnitTest extends ComparisonTestCase {
- protected IndexSerializedComparator comp;
-
- public void testSearch() throws IOException {
- byte[] k1 = comp.createCompositeKey(convert("aaaa"), convert(1));
- byte[] k2 = comp.createCompositeKey(convert("bbbb"), convert(2));
- byte[] k3 = comp.createCompositeKey(convert("bbbb"), convert(3));
- byte[] k4 = comp.createCompositeKey(convert(null), convert(1));
-
- byte[] s1 = comp.createCompositeKey(convert("aaaa"), new byte[] {SoplogToken.WILDCARD.toByte()});
- byte[] s2 = comp.createCompositeKey(convert("bbbb"), new byte[] {SoplogToken.WILDCARD.toByte()});
- byte[] s3 = comp.createCompositeKey(new byte[] {SoplogToken.WILDCARD.toByte()}, convert(1));
-
- compareAsIs(comp, k1, s1, Comparison.EQ);
- compareAsIs(comp, k2, s1, Comparison.GT);
- compareAsIs(comp, k1, s2, Comparison.LT);
- compareAsIs(comp, k2, s2, Comparison.EQ);
- compareAsIs(comp, k3, s2, Comparison.EQ);
- compareAsIs(comp, k4, s2, Comparison.GT);
- compareAsIs(comp, s3, k4, Comparison.EQ);
- }
-
- public void testCompositeKey() throws IOException {
- byte[] k1 = comp.createCompositeKey(convert("aaaa"), convert(1));
- byte[] k2 = comp.createCompositeKey(convert("bbbb"), convert(2));
- byte[] k3 = comp.createCompositeKey(convert("bbbb"), convert(3));
- byte[] k4 = comp.createCompositeKey(convert("cccc"), convert(1));
- byte[] k5 = comp.createCompositeKey(convert(null), convert(1));
-
- compareAsIs(comp, k1, k1, Comparison.EQ);
- compareAsIs(comp, k1, k2, Comparison.LT);
- compareAsIs(comp, k2, k1, Comparison.GT);
- compareAsIs(comp, k2, k3, Comparison.LT);
- compareAsIs(comp, k3, k4, Comparison.LT);
-
- compareAsIs(comp, k4, k5, Comparison.LT);
- compareAsIs(comp, k5, k1, Comparison.GT);
- }
-
- public void testGetKey() throws Exception {
- ByteBuffer key = ByteBuffer.wrap(comp.createCompositeKey(convert("aaaa"), convert(1)));
-
- ByteBuffer k1 = comp.getKey(key, 0);
- assertEquals("aaaa", recover(k1.array(), k1.arrayOffset(), k1.remaining()));
-
- ByteBuffer k2 = comp.getKey(key, 1);
- assertEquals(1, recover(k2.array(), k2.arrayOffset(), k2.remaining()));
- }
-
- public void setUp() {
- comp = new IndexSerializedComparator();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/LexicographicalComparatorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/LexicographicalComparatorJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/LexicographicalComparatorJUnitTest.java
deleted file mode 100644
index 0c0e93e..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/LexicographicalComparatorJUnitTest.java
+++ /dev/null
@@ -1,204 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-
-import org.apache.hadoop.hbase.util.Bytes;
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.internal.DSCODE;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class LexicographicalComparatorJUnitTest extends ComparisonTestCase {
- private LexicographicalComparator lc;
-
- public void testMixedNumeric() throws Exception {
- compare(lc, (byte) 1, (short) 2, Comparison.LT);
- compare(lc, (byte) 1, (int) 2, Comparison.LT);
- compare(lc, (byte) 1, (long) 2, Comparison.LT);
- compare(lc, (byte) 1, 2.1f, Comparison.LT);
- compare(lc, (byte) 1, 2.1d, Comparison.LT);
-
- compare(lc, (short) 1, (byte) 2, Comparison.LT);
- compare(lc, (short) 1, (int) 2, Comparison.LT);
- compare(lc, (short) 1, (long) 2, Comparison.LT);
- compare(lc, (short) 1, 2.1f, Comparison.LT);
- compare(lc, (short) 1, 2.1d, Comparison.LT);
-
- compare(lc, (int) 1, (byte) 2, Comparison.LT);
- compare(lc, (int) 1, (short) 2, Comparison.LT);
- compare(lc, (int) 1, (long) 2, Comparison.LT);
- compare(lc, (int) 1, 2.1f, Comparison.LT);
- compare(lc, (int) 1, 2.1d, Comparison.LT);
-
- compare(lc, (long) 1, (byte) 2, Comparison.LT);
- compare(lc, (long) 1, (short) 2, Comparison.LT);
- compare(lc, (long) 1, (int) 2, Comparison.LT);
- compare(lc, (long) 1, 2.1f, Comparison.LT);
- compare(lc, (long) 1, 2.1d, Comparison.LT);
-
- compare(lc, 1.1f, (byte) 2, Comparison.LT);
- compare(lc, 1.1f, (short) 2, Comparison.LT);
- compare(lc, 1.1f, (int) 2, Comparison.LT);
- compare(lc, 1.1f, (long) 2, Comparison.LT);
- compare(lc, 1.1f, 2.1d, Comparison.LT);
-
- compare(lc, 1.1d, (byte) 2, Comparison.LT);
- compare(lc, 1.1d, (short) 2, Comparison.LT);
- compare(lc, 1.1d, (int) 2, Comparison.LT);
- compare(lc, 1.1d, (long) 2, Comparison.LT);
- compare(lc, 1.1d, 2.1f, Comparison.LT);
- }
-
- public void testBoolean() throws Exception {
- compare(lc, Boolean.TRUE, Boolean.TRUE, Comparison.EQ);
- compare(lc, Boolean.FALSE, Boolean.FALSE, Comparison.EQ);
- compare(lc, Boolean.TRUE, Boolean.FALSE, Comparison.GT);
- compare(lc, Boolean.FALSE, Boolean.TRUE, Comparison.LT);
- }
-
- public void testByte() throws Exception {
- compare(lc, (byte) 0, (byte) 0, Comparison.EQ);
- compare(lc, (byte) 0, (byte) 1, Comparison.LT);
- compare(lc, (byte) -1, (byte) 1, Comparison.LT);
- compare(lc, (byte) 1, (byte) -1, Comparison.GT);
- compare(lc, (byte) -2, (byte) -1, Comparison.LT);
- compare(lc, (byte) 1, (byte) 2, Comparison.LT);
- compare(lc, (byte) 2, (byte) 1, Comparison.GT);
- }
-
- public void testShort() throws Exception {
- compare(lc, (short) 0, (short) 0, Comparison.EQ);
- compare(lc, (short) 0, (short) 1, Comparison.LT);
- compare(lc, (short) -1, (short) 1, Comparison.LT);
- compare(lc, (short) 1, (short) -1, Comparison.GT);
- compare(lc, (short) -2, (short) -1, Comparison.LT);
- compare(lc, (short) 1, (short) 2, Comparison.LT);
- compare(lc, (short) 2, (short) 1, Comparison.GT);
- }
-
- public void testInt() throws Exception {
- compare(lc, (int) 0, (int) 0, Comparison.EQ);
- compare(lc, (int) 0, (int) 1, Comparison.LT);
- compare(lc, (int) -1, (int) 1, Comparison.LT);
- compare(lc, (int) 1, (int) -1, Comparison.GT);
- compare(lc, (int) -2, (int) -1, Comparison.LT);
- compare(lc, (int) 1, (int) 2, Comparison.LT);
- compare(lc, (int) 2, (int) 1, Comparison.GT);
- }
-
- public void testLong() throws Exception {
- compare(lc, (long) 0, (long) 0, Comparison.EQ);
- compare(lc, (long) 0, (long) 1, Comparison.LT);
- compare(lc, (long) -1, (long) 1, Comparison.LT);
- compare(lc, (long) 1, (long) -1, Comparison.GT);
- compare(lc, (long) -2, (long) -1, Comparison.LT);
- compare(lc, (long) 1, (long) 2, Comparison.LT);
- compare(lc, (long) 2, (long) 1, Comparison.GT);
- }
-
- public void testFloat() throws Exception {
- compare(lc, 0.0f, 0.0f, Comparison.EQ);
- compare(lc, 0.0f, 1.0f, Comparison.LT);
- compare(lc, -1.0f, 1.0f, Comparison.LT);
- compare(lc, 1.0f, -1.0f, Comparison.GT);
- compare(lc, -2.0f, -1.0f, Comparison.LT);
- compare(lc, 1.0f, 2.0f, Comparison.LT);
- compare(lc, 2.0f, 1.0f, Comparison.GT);
- compare(lc, 2.1f, 0.9f, Comparison.GT);
- }
-
- public void testDouble() throws Exception {
- compare(lc, 0.0d, 0.0d, Comparison.EQ);
- compare(lc, 0.0d, 1.0d, Comparison.LT);
- compare(lc, -1.0d, 1.0d, Comparison.LT);
- compare(lc, 1.0d, -1.0d, Comparison.GT);
- compare(lc, -2.0d, -1.0d, Comparison.LT);
- compare(lc, 1.0d, 2.0d, Comparison.LT);
- compare(lc, 2.0d, 1.0d, Comparison.GT);
- compare(lc, 2.1d, 0.9d, Comparison.GT);
- }
-
- public void testString() throws Exception {
- compare(lc, "", "", Comparison.EQ);
- compare(lc, "aa", "a", Comparison.GT);
- compare(lc, "a", "b", Comparison.LT);
- compare(lc, "b", "a", Comparison.GT);
- compare(lc, "baah", "aardvark", Comparison.GT);
- compare(lc, "Chloé", "Réal", Comparison.LT);
- compare(lc, "chowder", "Réal", Comparison.GT);
- compare(lc, "Réal", "chowder", Comparison.LT);
- compare(lc, "Réal", "Réa", Comparison.GT);
- compare(lc, "Réal", "Réa", Comparison.GT);
- compare(lc, "\u0061\u00a2\u0f00", "\u0061\u00a2\u0f00\u0061", Comparison.LT);
- }
-
- public void testChar() throws Exception {
- compare(lc, 'a', 'a', Comparison.EQ);
- compare(lc, 'a', 'b', Comparison.LT);
- compare(lc, 'b', 'a', Comparison.GT);
- }
-
- public void testNull() throws Exception {
- compare(lc, null, null, Comparison.EQ);
- compare(lc, null, "hi mom", Comparison.GT);
- compare(lc, "hi mom", null, Comparison.LT);
- }
-
- public void testObject() throws Exception {
- compare(lc, new BigInteger("1"), new BigInteger("1"), Comparison.EQ);
- compare(lc, new BigInteger("1"), new BigInteger("0"), Comparison.GT);
- compare(lc, new BigInteger("-1"), new BigInteger("0"), Comparison.LT);
- }
-
- public void testIntPerformance() throws Exception {
- ByteBuffer b1 = ByteBuffer.allocate(5).put(0, DSCODE.INTEGER);
- ByteBuffer b2 = ByteBuffer.allocate(5).put(0, DSCODE.INTEGER);
-
- for (int n = 0; n < 5; n++) {
- long diff = 0;
- int count = 10000000;
- long start = System.nanoTime();
- for (int i = 0; i < count; i++) {
- b1.putInt(1, i);
- b2.putInt(1, i + 1);
- diff += lc.compare(b1.array(), b1.arrayOffset(), b1.capacity(), b2.array(), b2.arrayOffset(), b2.capacity());
- }
- long nanos = System.nanoTime() - start;
-
- System.out.printf("(%d) %f int comparisons / ms\n", diff, 1000000.0 * count / nanos);
-
- diff = 0;
- start = System.nanoTime();
- for (int i = 0; i < count; i++) {
- b1.putInt(1, i);
- b2.putInt(1, i + 1);
- diff += Bytes.compareTo(b1.array(), b1.arrayOffset(), b1.capacity(), b2.array(), b2.arrayOffset(), b2.capacity());
- }
- nanos = System.nanoTime() - start;
-
- System.out.printf("(%d) %f byte comparisons / ms\n\n", diff, 1000000.0 * count / nanos);
- }
- }
-
- protected void setUp() {
- lc = new LexicographicalComparator();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/RecoverableSortedOplogSet.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/RecoverableSortedOplogSet.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/RecoverableSortedOplogSet.java
deleted file mode 100644
index 0b3e1f5..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/RecoverableSortedOplogSet.java
+++ /dev/null
@@ -1,221 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.nio.ByteBuffer;
-import java.util.EnumMap;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.logging.log4j.Logger;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.AppendLog.AppendLogWriter;
-import com.gemstone.gemfire.internal.logging.LogService;
-
-public class RecoverableSortedOplogSet extends AbstractSortedReader implements SortedOplogSet {
- private static final Logger logger = LogService.getLogger();
-
- private final SortedOplogSet sos;
- private final long bufferSize;
-
- private final long maxBufferMemory;
-
- private final Lock rollLock;
- private AtomicReference<AppendLogWriter> writer;
-
- private final String logPrefix;
-
- public RecoverableSortedOplogSet(SortedOplogSet sos, long bufferSize, double memLimit) throws IOException {
- this.sos = sos;
- this.bufferSize = bufferSize;
-
- this.logPrefix = "<" + sos.getFactory().getConfiguration().getName() + "> ";
-
- rollLock = new ReentrantLock();
- writer = new AtomicReference<AppendLogWriter>(AppendLog.create(nextLogFile()));
-
- maxBufferMemory = Math.round(memLimit * ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax());
- }
-
- @Override
- public boolean mightContain(byte[] key) throws IOException {
- return sos.mightContain(key);
- }
-
- @Override
- public ByteBuffer read(byte[] key) throws IOException {
- return sos.read(key);
- }
-
- @Override
- public SortedIterator<ByteBuffer> scan(byte[] from, boolean fromInclusive, byte[] to, boolean toInclusive) throws IOException {
- return sos.scan(from, fromInclusive, to, toInclusive);
- }
-
- @Override
- public SortedIterator<ByteBuffer> scan(
- byte[] from,
- boolean fromInclusive,
- byte[] to,
- boolean toInclusive,
- boolean ascending,
- MetadataFilter filter) throws IOException {
- return sos.scan(from, fromInclusive, to, toInclusive, ascending, filter);
- }
-
- @Override
- public SerializedComparator getComparator() {
- return sos.getComparator();
- }
-
- @Override
- public SortedOplogFactory getFactory() {
- return sos.getFactory();
- }
-
- @Override
- public SortedStatistics getStatistics() throws IOException {
- return sos.getStatistics();
- }
-
- @Override
- public void close() throws IOException {
- rollLock.lock();
- try {
- writer.get().close();
- writer.set(null);
- sos.close();
- } finally {
- rollLock.unlock();
- }
- }
-
- @Override
- public void put(byte[] key, byte[] value) throws IOException {
- throttle();
- if (sos.bufferSize() > bufferSize) {
- roll(false);
- }
-
- writer.get().append(key, value);
- sos.put(key, value);
- }
-
- @Override
- public long bufferSize() {
- return sos.bufferSize();
- }
-
- @Override
- public long unflushedSize() {
- return sos.unflushedSize();
- }
-
- @Override
- public void flush(EnumMap<Metadata, byte[]> metadata, FlushHandler handler) throws IOException {
- roll(true);
- }
-
- @Override
- public void flushAndClose(EnumMap<Metadata, byte[]> metadata) throws IOException {
- throw new RuntimeException("Not implemented");
- }
-
- @Override
- public Compactor getCompactor() {
- return sos.getCompactor();
- }
-
- @Override
- public void clear() throws IOException {
- rollLock.lock();
- try {
- roll(true);
- sos.clear();
- } finally {
- rollLock.unlock();
- }
- }
-
- @Override
- public void destroy() throws IOException {
- roll(true);
- sos.destroy();
- }
-
- @Override
- public boolean isClosed() {
- return sos.isClosed();
- }
-
- private void throttle() {
- int n = 0;
- while (sos.bufferSize() + sos.unflushedSize() > maxBufferMemory) {
- try {
- Thread.sleep(1 << n++);
-
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- break;
- }
- }
- }
-
- private void roll(boolean wait) throws IOException {
- boolean locked = true;
- if (wait) {
- rollLock.lock();
- } else {
- locked = rollLock.tryLock();
- }
-
- if (locked) {
- try {
- AppendLogWriter next = AppendLog.create(nextLogFile());
- final AppendLogWriter old = writer.getAndSet(next);
- old.close();
-
- if (logger.isDebugEnabled()) {
- logger.debug("{}Rolling from {} to {}", this.logPrefix, old.getFile(), next.getFile());
- }
-
- sos.flush(null, new FlushHandler() {
- @Override
- public void complete() {
- old.getFile().delete();
- }
-
- @Override
- public void error(Throwable t) {
- }
- });
- } finally {
- rollLock.unlock();
- }
- }
- }
-
- private File nextLogFile() {
- return new File(sos.getFactory().getConfiguration().getName()
- + "-" + UUID.randomUUID().toString() + ".aolog");
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredCompactorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredCompactorJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredCompactorJUnitTest.java
deleted file mode 100644
index ee76c55..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredCompactorJUnitTest.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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.concurrent.Executors;
-
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplog.SortedOplogReader;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SortedIterator;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class SizeTieredCompactorJUnitTest extends CompactionTestCase<Integer> {
- public void testBasic() throws Exception {
- compactor.add(createSoplog(0, 100, 0));
-
- assertEquals(1, compactor.getActiveReaders(null, null).size());
- assertEquals(1, compactor.getLevel(0).getSnapshot().size());
- assertFalse(compactor.getLevel(0).needsCompaction());
-
- WaitingHandler wh = new WaitingHandler();
- compactor.compact(false, wh);
- wh.waitForCompletion();
-
- assertEquals(1, compactor.getActiveReaders(null, null).size());
- assertEquals(1, compactor.getLevel(0).getSnapshot().size());
- assertFalse(compactor.getLevel(0).needsCompaction());
- }
-
- public void testCompactionLevel0() throws Exception {
- compactor.add(createSoplog(0, 100, 0));
- compactor.add(createSoplog(100, 100, 1));
-
- assertEquals(2, compactor.getActiveReaders(null, null).size());
- assertEquals(2, compactor.getLevel(0).getSnapshot().size());
- assertTrue(compactor.getLevel(0).needsCompaction());
-
- WaitingHandler wh = new WaitingHandler();
- compactor.compact(false, wh);
- wh.waitForCompletion();
-
- assertEquals(1, compactor.getActiveReaders(null, null).size());
- assertEquals(0, compactor.getLevel(0).getSnapshot().size());
- assertEquals(1, compactor.getLevel(1).getSnapshot().size());
- assertFalse(compactor.getLevel(0).needsCompaction());
- assertFalse(compactor.getLevel(1).needsCompaction());
-
- validate(compactor.getActiveReaders(null, null).iterator().next().get(), 0, 200);
- }
-
- public void testMultilevelCompaction() throws Exception {
- for (int i = 0; i < 8; i += 2) {
- compactor.add(createSoplog(0, 100, i));
- compactor.add(createSoplog(100, 100, i+1));
-
- WaitingHandler wh = new WaitingHandler();
- compactor.compact(false, wh);
- wh.waitForCompletion();
- }
-
- assertEquals(1, compactor.getActiveReaders(null, null).size());
- validate(compactor.getActiveReaders(null, null).iterator().next().get(), 0, 200);
- }
-
- public void testForceCompaction() throws Exception {
- compactor.add(createSoplog(0, 100, 0));
- compactor.add(createSoplog(100, 100, 1));
- boolean compacted = compactor.compact();
-
- assertTrue(compacted);
- validate(compactor.getActiveReaders(null, null).iterator().next().get(), 0, 200);
- }
-
- @Override
- protected AbstractCompactor<Integer> createCompactor(SortedOplogFactory factory) throws IOException {
- return new SizeTieredCompactor(factory,
- NonCompactor.createFileset("test", new File(".")),
- new FileTracker(),
- Executors.newSingleThreadExecutor(),
- 2, 4);
- }
-
- private void validate(SortedOplogReader soplog, int start, int count) throws IOException {
- int i = 0;
- for (SortedIterator<ByteBuffer> iter = soplog.scan(); iter.hasNext(); i++) {
- iter.next();
- assertEquals(i, iter.key().getInt());
- assertEquals(i, iter.value().getInt());
- }
- assertEquals(count, i);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredSortedOplogSetJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredSortedOplogSetJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredSortedOplogSetJUnitTest.java
deleted file mode 100644
index cf1de00..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SizeTieredSortedOplogSetJUnitTest.java
+++ /dev/null
@@ -1,43 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.concurrent.Executors;
-
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.CompactionTestCase.FileTracker;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class SizeTieredSortedOplogSetJUnitTest extends CompactionSortedOplogSetTestCase {
- @Override
- protected AbstractCompactor<?> createCompactor(SortedOplogFactory factory) throws IOException {
- return new SizeTieredCompactor(factory,
- NonCompactor.createFileset("test", new File(".")),
- new FileTracker(),
- Executors.newSingleThreadExecutor(),
- 2, 4);
- }
- @Override
- public void testStatistics() throws IOException {
- // remove this noop override when bug 52249 is fixed
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedBufferJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedBufferJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedBufferJUnitTest.java
deleted file mode 100644
index 1d79059..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedBufferJUnitTest.java
+++ /dev/null
@@ -1,39 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.nio.ByteBuffer;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
-
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplogFactory.SortedOplogConfiguration;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class SortedBufferJUnitTest extends SortedReaderTestCase {
- @Override
- protected SortedReader<ByteBuffer> createReader(NavigableMap<byte[], byte[]> data) {
- SortedOplogConfiguration config = new SortedOplogConfiguration("test");
- SortedBuffer<Integer> sb = new SortedBuffer<Integer>(config, 0);
- for (Entry<byte[], byte[]> entry : data.entrySet()) {
- sb.put(entry.getKey(), entry.getValue());
- }
- return sb;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedOplogSetJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedOplogSetJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedOplogSetJUnitTest.java
deleted file mode 100644
index bb0a198..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedOplogSetJUnitTest.java
+++ /dev/null
@@ -1,273 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executors;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplogSet.FlushHandler;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SortedIterator;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.nofile.NoFileSortedOplogFactory;
-import com.gemstone.gemfire.internal.logging.LogService;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class SortedOplogSetJUnitTest extends SortedReaderTestCase {
- private static final Logger logger = LogService.getLogger();
- private SortedOplogSet set;
-
- public void testMergedIterator() throws IOException {
- FlushCounter handler = new FlushCounter();
- SortedOplogSet sos = createSoplogSet("merge");
-
- // #1
- sos.put(wrapInt(1), wrapInt(1));
- sos.put(wrapInt(2), wrapInt(1));
- sos.put(wrapInt(3), wrapInt(1));
- sos.put(wrapInt(4), wrapInt(1));
- sos.flush(null, handler);
-
- // #2
- sos.put(wrapInt(2), wrapInt(1));
- sos.put(wrapInt(4), wrapInt(1));
- sos.put(wrapInt(6), wrapInt(1));
- sos.put(wrapInt(8), wrapInt(1));
- sos.flush(null, handler);
-
- // #3
- sos.put(wrapInt(1), wrapInt(1));
- sos.put(wrapInt(3), wrapInt(1));
- sos.put(wrapInt(5), wrapInt(1));
- sos.put(wrapInt(7), wrapInt(1));
- sos.put(wrapInt(9), wrapInt(1));
- sos.flush(null, handler);
-
- // #4
- sos.put(wrapInt(0), wrapInt(1));
- sos.put(wrapInt(1), wrapInt(1));
- sos.put(wrapInt(4), wrapInt(1));
- sos.put(wrapInt(5), wrapInt(1));
-
- while (!handler.flushes.compareAndSet(3, 0));
-
- // the iteration pattern for this test should be 0-9:
- // 0 1 4 5 sbuffer #4
- // 1 3 5 7 9 soplog #3
- // 2 4 6 8 soplog #2
- // 1 2 3 4 soplog #1
- List<Integer> result = new ArrayList<Integer>();
- SortedIterator<ByteBuffer> iter = sos.scan();
- try {
- while (iter.hasNext()) {
- ByteBuffer key = iter.next();
- ByteBuffer val = iter.value();
- assertEquals(wrapInt(1), val);
-
- result.add(key.getInt());
- }
- } finally {
- iter.close();
- }
-
- sos.close();
-
- assertEquals(10, result.size());
- for (int i = 0; i < 10; i++) {
- assertEquals(i, result.get(i).intValue());
- }
- }
-
- @Override
- protected SortedReader<ByteBuffer> createReader(NavigableMap<byte[], byte[]> data)
- throws IOException {
- set = createSoplogSet("test");
-
- int i = 0;
- int flushes = 0;
- FlushCounter fc = new FlushCounter();
-
- for (Entry<byte[], byte[]> entry : data.entrySet()) {
- set.put(entry.getKey(), entry.getValue());
- if (i++ % 13 == 0) {
- flushes++;
- set.flush(null, fc);
- }
- }
-
- while (!fc.flushes.compareAndSet(flushes, 0));
- return set;
- }
-
- public void testClear() throws IOException {
- set.clear();
- validateEmpty(set);
- }
-
- public void testDestroy() throws IOException {
- set.destroy();
- assertTrue(((SortedOplogSetImpl) set).isClosed());
- try {
- set.scan();
- fail();
- } catch (IllegalStateException e) { }
- }
-
- public void testClearInterruptsFlush() throws Exception {
- FlushCounter handler = new FlushCounter();
- SortedOplogSetImpl sos = prepSoplogSet("clearDuringFlush");
-
- sos.testDelayDuringFlush = new CountDownLatch(1);
- sos.flush(null, handler);
- sos.clear();
-
- flushAndWait(handler, sos);
- validateEmpty(sos);
- assertEquals(2, handler.flushes.get());
- }
-
- public void testClearRepeat() throws Exception {
- int i = 0;
- do {
- testClearInterruptsFlush();
- logger.debug("Test {} is complete", i);
- tearDown();
- setUp();
- } while (i++ < 100);
- }
-
- public void testCloseInterruptsFlush() throws Exception {
- FlushCounter handler = new FlushCounter();
- SortedOplogSetImpl sos = prepSoplogSet("closeDuringFlush");
-
- sos.testDelayDuringFlush = new CountDownLatch(1);
- sos.flush(null, handler);
- sos.close();
-
- assertTrue(sos.isClosed());
- assertEquals(1, handler.flushes.get());
- }
-
- public void testDestroyInterruptsFlush() throws Exception {
- FlushCounter handler = new FlushCounter();
- SortedOplogSetImpl sos = prepSoplogSet("destroyDuringFlush");
-
- sos.testDelayDuringFlush = new CountDownLatch(1);
- sos.flush(null, handler);
- sos.destroy();
-
- assertTrue(sos.isClosed());
- assertEquals(1, handler.flushes.get());
- }
-
- public void testScanAfterClear() throws IOException {
- SortedIterator<ByteBuffer> iter = set.scan();
- set.clear();
- assertFalse(iter.hasNext());
- }
-
- public void testScanAfterClose() throws IOException {
- SortedIterator<ByteBuffer> iter = set.scan();
- set.close();
- assertFalse(iter.hasNext());
- }
-
- public void testEmptyFlush() throws Exception {
- FlushCounter handler = new FlushCounter();
- SortedOplogSet sos = prepSoplogSet("empty");
-
- flushAndWait(handler, sos);
- flushAndWait(handler, sos);
- }
-
- public void testErrorDuringFlush() throws Exception {
- FlushCounter handler = new FlushCounter();
- handler.error.set(true);
-
- SortedOplogSetImpl sos = prepSoplogSet("err");
- sos.testErrorDuringFlush = true;
-
- flushAndWait(handler, sos);
- }
-
- protected void validateEmpty(SortedOplogSet sos) throws IOException {
- assertEquals(0, sos.bufferSize());
- assertEquals(0, sos.unflushedSize());
-
- SortedIterator<ByteBuffer> iter = sos.scan();
- assertFalse(iter.hasNext());
- iter.close();
- sos.close();
- }
-
- protected SortedOplogSetImpl prepSoplogSet(String name) throws IOException {
- SortedOplogSetImpl sos = createSoplogSet(name);
-
- sos.put(wrapInt(1), wrapInt(1));
- sos.put(wrapInt(2), wrapInt(1));
- sos.put(wrapInt(3), wrapInt(1));
- sos.put(wrapInt(4), wrapInt(1));
-
- return sos;
- }
-
- protected SortedOplogSetImpl createSoplogSet(String name) throws IOException {
- SortedOplogFactory factory = new NoFileSortedOplogFactory(name);
- Compactor compactor = new NonCompactor(name, new File("."));
-
- return new SortedOplogSetImpl(factory, Executors.newSingleThreadExecutor(), compactor);
- }
-
- protected void flushAndWait(FlushCounter handler, SortedOplogSet sos)
- throws InterruptedException, IOException {
- sos.flush(null, handler);
- while (sos.unflushedSize() > 0) {
- Thread.sleep(1000);
- }
- }
-
- protected static class FlushCounter implements FlushHandler {
- private final AtomicInteger flushes = new AtomicInteger(0);
- private final AtomicBoolean error = new AtomicBoolean(false);
-
- @Override
- public void complete() {
- logger.debug("Flush complete! {}", this);
- assertFalse(error.get());
- flushes.incrementAndGet();
- }
-
- @Override
- public void error(Throwable t) {
- if (!error.get()) {
- t.printStackTrace();
- fail(t.getMessage());
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReaderTestCase.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReaderTestCase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReaderTestCase.java
deleted file mode 100644
index b41e6ba..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReaderTestCase.java
+++ /dev/null
@@ -1,295 +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 com.gemstone.gemfire.internal.cache.persistence.soplog;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
-import java.util.TreeMap;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
-import junit.framework.TestCase;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SortedIterator;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader.SortedStatistics;
-
-public abstract class SortedReaderTestCase extends TestCase {
- private NavigableMap<byte[], byte[]> data;
- protected SortedReader<ByteBuffer> reader;
-
- public static void assertEquals(byte[] expected, ByteBuffer actual) {
- assertEquals(expected.length, actual.remaining());
- for (int i = 0; i < expected.length; i++) {
- assertEquals(expected[i], actual.get(actual.position() + i));
- }
- }
-
- public void testComparator() {
- assertNotNull(reader.getComparator());
- }
-
- public void testStatistics() throws IOException {
- SortedStatistics stats = reader.getStatistics();
- try {
- assertEquals(data.size(), stats.keyCount());
- assertTrue(Arrays.equals(data.firstKey(), stats.firstKey()));
- assertTrue(Arrays.equals(data.lastKey(), stats.lastKey()));
-
- int keySize = 0;
- int valSize = 0;
- for (Entry<byte[], byte[]> entry : data.entrySet()) {
- keySize += entry.getKey().length;
- valSize += entry.getValue().length;
- }
-
- double avgKey = keySize / data.size();
- double avgVal = valSize / data.size();
-
- assertEquals(avgVal, stats.avgValueSize());
- assertEquals(avgKey, stats.avgKeySize());
-
- } finally {
- stats.close();
- }
- }
-
- public void testMightContain() throws IOException {
- for (byte[] key : data.keySet()) {
- assertTrue(reader.mightContain(key));
- }
- }
-
- public void testRead() throws IOException {
- for (byte[] key : data.keySet()) {
- assertEquals(data.get(key), reader.read(key));
- }
- }
-
- public void testScan() throws IOException {
- SortedIterator<ByteBuffer> scan = reader.scan();
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.entrySet().iterator();
- doIter(scan, iter);
-
- } finally {
- scan.close();
- }
- }
-
- public void testMultithreadScan() throws Exception {
- int threads = 10;
- ExecutorService exec = Executors.newFixedThreadPool(threads);
- List<Callable<Boolean>> tasks = new ArrayList<Callable<Boolean>>();
- for (int i = 0; i < threads; i++) {
- tasks.add(new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- testScan();
- return true;
- }
- });
- }
-
- int i = 0;
- while (i++ < 1000) {
- for (Future<Boolean> ft : exec.invokeAll(tasks)) {
- assertTrue(ft.get());
- }
- }
- }
-
- public void testScanReverse() throws IOException {
- SortedIterator<ByteBuffer> scan = reader.withAscending(false).scan();
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.descendingMap().entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
- }
-
- public void testHead() throws IOException {
- byte[] split = wrapInt(50);
- SortedIterator<ByteBuffer> scan = reader.head(split, true);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.headMap(split, true).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
-
- scan = reader.head(split, false);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.headMap(split, false).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
- }
-
- public void testTail() throws IOException {
- byte[] split = wrapInt(50);
- SortedIterator<ByteBuffer> scan = reader.tail(split, true);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.tailMap(split, true).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
-
- scan = reader.tail(split, false);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.tailMap(split, false).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
- }
-
- public void testScanWithBounds() throws IOException {
- byte[] lhs = wrapInt(10);
- byte[] rhs = wrapInt(90);
-
- // [lhs,rhs)
- SortedIterator<ByteBuffer> scan = reader.scan(lhs, rhs);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.subMap(lhs, rhs).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
-
- // (lhs,rhs)
- scan = reader.scan(lhs, false, rhs, false);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.subMap(lhs, false, rhs, false).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
-
- // [lhs,rhs]
- scan = reader.scan(lhs, true, rhs, true);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.subMap(lhs, true, rhs, true).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
- }
-
- public void testReverseScanWithBounds() throws IOException {
- data = data.descendingMap();
- byte[] rhs = wrapInt(10);
- byte[] lhs = wrapInt(90);
-
- SortedReader<ByteBuffer> rev = reader.withAscending(false);
-
- // [rhs,lhs)
- SortedIterator<ByteBuffer> scan = rev.scan(lhs, rhs);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.subMap(lhs, rhs).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
-
- // (rhs,lhs)
- scan = rev.scan(lhs, false, rhs, false);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.subMap(lhs, false, rhs, false).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
-
- // [rhs,lhs]
- scan = rev.scan(lhs, true, rhs, true);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.subMap(lhs, true, rhs, true).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
- }
-
- public void testScanEquality() throws IOException {
- byte[] val = wrapInt(10);
-
- // [val,val]
- SortedIterator<ByteBuffer> scan = reader.scan(val);
- try {
- Iterator<Entry<byte[], byte[]>> iter = data.subMap(val, true, val, true).entrySet().iterator();
- doIter(scan, iter);
- } finally {
- scan.close();
- }
- }
-
- public static byte[] wrapInt(int n) {
- ByteBuffer buf = (ByteBuffer) ByteBuffer.allocate(4).putInt(n).flip();
- return buf.array();
- }
-
- public static File[] getSoplogsToDelete() {
- return new File(".").listFiles(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- return name.endsWith("soplog") || name.endsWith("crc");
- }
- });
- }
-
- private void doIter(SortedIterator<ByteBuffer> scan, Iterator<Entry<byte[], byte[]>> iter) {
- while (scan.hasNext() || iter.hasNext()) {
- Entry<byte[], byte[]> expected = iter.next();
- assertEquals(expected.getKey(), scan.next());
- assertEquals(expected.getValue(), scan.value());
- }
- }
-
- @Override
- protected final void setUp() throws IOException {
- data = new TreeMap<byte[], byte[]>(new ByteComparator());
-
- for (int i = 0; i < 100; i++) {
- data.put(wrapInt(i), wrapInt(i));
- }
- reader = createReader(data);
- }
-
- @Override
- protected void tearDown() throws IOException {
- reader.close();
- for (File f : getSoplogsToDelete()) {
- f.delete();
- }
- }
-
- protected abstract SortedReader<ByteBuffer> createReader(NavigableMap<byte[], byte[]> data)
- throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/9438c8b1/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogJUnitTest.java
deleted file mode 100644
index b6813d7..0000000
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/soplog/nofile/NoFileSortedOplogJUnitTest.java
+++ /dev/null
@@ -1,48 +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 com.gemstone.gemfire.internal.cache.persistence.soplog.nofile;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Map.Entry;
-import java.util.NavigableMap;
-
-import org.junit.experimental.categories.Category;
-
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplog.SortedOplogWriter;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedOplogFactory.SortedOplogConfiguration;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReader;
-import com.gemstone.gemfire.internal.cache.persistence.soplog.SortedReaderTestCase;
-import com.gemstone.gemfire.test.junit.categories.UnitTest;
-
-@Category(UnitTest.class)
-public class NoFileSortedOplogJUnitTest extends SortedReaderTestCase {
- private NoFileSortedOplog mfile;
-
- @Override
- protected SortedReader<ByteBuffer> createReader(NavigableMap<byte[], byte[]> data) throws IOException {
- mfile = new NoFileSortedOplog(new SortedOplogConfiguration("nofile"));
-
- SortedOplogWriter wtr = mfile.createWriter();
- for (Entry<byte[], byte[]> entry : data.entrySet()) {
- wtr.append(entry.getKey(), entry.getValue());
- }
- wtr.close(null);
-
- return mfile.createReader();
- }
-}