Repository: ignite Updated Branches: refs/heads/vozerov_wal_debug [created] e04876e6c
WIP Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e04876e6 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e04876e6 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e04876e6 Branch: refs/heads/vozerov_wal_debug Commit: e04876e6c2da713b788f6204c6a34c76bdb8fc35 Parents: e4458d4 Author: devozerov <[email protected]> Authored: Tue Nov 28 14:12:57 2017 +0300 Committer: devozerov <[email protected]> Committed: Tue Nov 28 14:12:57 2017 +0300 ---------------------------------------------------------------------- .../wal/FileWriteAheadLogManager.java | 9 +- .../query/h2/opt/IndexBenchmarkRunner2.java | 128 +++++++++++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/e04876e6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java index a450521..6f0ad43 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java @@ -554,6 +554,8 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl } } + public static volatile boolean print = false; + /** {@inheritDoc} */ @SuppressWarnings("TooBroadScope") @Override public WALPointer log(WALRecord record) throws IgniteCheckedException, StorageException { @@ -567,7 +569,12 @@ public class FileWriteAheadLogManager extends GridCacheSharedManagerAdapter impl return null; // Need to calculate record size first. - record.size(serializer.size(record)); + int size = serializer.size(record); + + if (print) + System.out.println("RECORD " + size + ": " + record.getClass().getSimpleName()); + + record.size(size); for (; ; currWrHandle = rollOver(currWrHandle)) { WALPointer ptr = currWrHandle.addRecord(record); http://git-wip-us.apache.org/repos/asf/ignite/blob/e04876e6/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/IndexBenchmarkRunner2.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/IndexBenchmarkRunner2.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/IndexBenchmarkRunner2.java new file mode 100644 index 0000000..efdffae --- /dev/null +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/IndexBenchmarkRunner2.java @@ -0,0 +1,128 @@ +package org.apache.ignite.internal.processors.query.h2.opt; + +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCache; +import org.apache.ignite.Ignition; +import org.apache.ignite.cache.QueryEntity; +import org.apache.ignite.cache.QueryIndex; +import org.apache.ignite.cache.query.annotations.QuerySqlField; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.DataStorageConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.configuration.WALMode; +import org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager; +import org.apache.ignite.internal.util.typedef.internal.U; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.LongAdder; + +public class IndexBenchmarkRunner2 { + private static final String CACHE_NAME = "cache"; + + private static final int IDX_CNT = 1; + + private static final long KEY_CNT = 1_000_000; + + private static final int THREAD_CNT = 4; + + private static final AtomicInteger READY_CNT = new AtomicInteger(); + + private static final LongAdder OPS = new LongAdder(); + + public static void main(String[] args) throws Exception { + U.delete(new File("C:\\Personal\\code\\incubator-ignite\\work")); + + IgniteConfiguration cfg = new IgniteConfiguration().setLocalHost("127.0.0.1"); + + DataStorageConfiguration dsCfg = new DataStorageConfiguration().setWalMode(WALMode.LOG_ONLY); + + dsCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true); + dsCfg.getDefaultDataRegionConfiguration().setMaxSize(4 * 1024 * 1024 * 1024L); + + dsCfg.setCheckpointFrequency(Long.MAX_VALUE); + + cfg.setDataStorageConfiguration(dsCfg); + + try (Ignite node = Ignition.start(cfg)) { + node.active(true); + + IgniteCache<Integer, ValueObject> cache = node.createCache(cacheConfig(IDX_CNT)); + + String extra = genExtra(ThreadLocalRandom.current()); + + cache.put(1, new ValueObject(1, extra)); + cache.remove(1); + + FileWriteAheadLogManager.print = true; + + System.out.println("PUT"); + cache.put(1, new ValueObject(1, extra)); + System.out.println(); + + System.out.println("UPDATE I"); + cache.put(1, new ValueObject(2, extra)); + System.out.println(); + + System.out.println("UPDATE S"); + cache.put(1, new ValueObject(2, genExtra(ThreadLocalRandom.current()))); + System.out.println(); + + System.out.println("DONE"); + } + } + + private static final int EXTRA_SIZE = 128; + + private static String genExtra(ThreadLocalRandom rand) { + StringBuilder builder = new StringBuilder(EXTRA_SIZE); + for (int i = 0; i < EXTRA_SIZE; ++i) + builder.append((char) ('a' + rand.nextInt('z' - 'a' + 1))); + return builder.toString(); + } + + private static CacheConfiguration<Integer, ValueObject> cacheConfig(int idxCnt) { + CacheConfiguration<Integer, ValueObject> ccfg = new CacheConfiguration<>(); + + ccfg.setName(CACHE_NAME); + ccfg.setQueryEntities(Collections.singleton(queryEntity(idxCnt))); + + return ccfg; + } + + private static QueryEntity queryEntity(int idxCnt) { + QueryEntity entity = new QueryEntity(Integer.class, ValueObject.class); + +// Collection<QueryIndex> idxs = new ArrayList<>(); +// +// for (int i = 0; i < idxCnt; i++) { +// String fieldName = "f" + i; +// +// QueryIndex idx = new QueryIndex().setFieldNames(Collections.singleton(fieldName), true); +// +// idxs.add(idx); +// } +// +// entity.setIndexes(idxs); + + return entity; + } + + private static class ValueObject { + @QuerySqlField(index = true) + private int i; + + @QuerySqlField + private String s; + + public ValueObject(int i, String s) { + this.i = i; + this.s = s; + } + } +}
