changeset 182:67d4c68578cf

add Jungle benchMark
author tatsuki
date Fri, 20 Mar 2015 15:35:53 +0900
parents 2e6ca84686da
children 066d9c5758dc
files src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeListWriter.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexManager.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/JungleBenchMark.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/findTreeAttributeThread.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/readTreeAttributeThread.java
diffstat 8 files changed, 177 insertions(+), 157 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeListWriter.java	Tue Mar 17 14:08:40 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeListWriter.java	Fri Mar 20 15:35:53 2015 +0900
@@ -2,5 +2,5 @@
 
 public interface ChangeListWriter
 {
-	public Result write(ChangeList operations);
+    public Result write(ChangeList operations);
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java	Tue Mar 17 14:08:40 2015 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-
-public class AtomicReservableReference<V>
-{
-	public static void main(String _args[])
-	{
-		String hoge = "hoge";
-		String fuga = "fuga";
-		AtomicReservableReference<String> arr = new AtomicReservableReference<String>(hoge);
-		AtomicReservableReference<String>.Reservation r1 = arr.makeReservation(hoge,fuga);
-		//AtomicReservableReference<String>.Reservation r2 = arr.makeReservation(hoge,fuga);
-		
-		System.out.println(arr.get());
-		r1.confirm();
-		System.out.println(arr.get());
-	}
-	
-	private AtomicReference<Reservation> reservation;
-	private AtomicBoolean flagReservation;
-	
-	public AtomicReservableReference(V _ref)
-	{
-		reservation = new AtomicReference<Reservation>(new Reservation(_ref,null,true));
-		flagReservation = new AtomicBoolean(false);
-	}
-	
-	public Reservation makeReservation(V _expect,V _update)
-	{
-		if(flagReservation.compareAndSet(false,true)){
-			V value = get();
-			if(value == _expect){
-				Reservation expect = reservation.get();
-				return new Reservation(_update,expect,false);
-			}
-			flagReservation.set(false);
-		}
-		
-		return null;
-	}
-	
-	public void set(V _value)
-	{
-		reservation.set(new Reservation(_value,null,true));
-	}
-	
-	public Reservation getReservation(){
-		return reservation.get();
-	}
-	
-	public V get()
-	{
-		Reservation r = reservation.get();
-		return r.get();
-	}
-	
-	
-	public class Reservation
-	{
-		public final Reservation expect;
-		public final AtomicReference<V> ref;
-		public final AtomicBoolean flagConfirmed;
-		
-		public Reservation(V _object,Reservation _expect,boolean _confirmed)
-		{
-			expect = _expect;
-			ref = new AtomicReference<V>(_object);
-			flagConfirmed = new AtomicBoolean(_confirmed);
-		}
-		
-		public void set(V object){
-			ref.set(object);
-		}
-		
-		public V get(){
-			return ref.get();
-		}
-		
-		
-		public void confirm()
-		{
-			if(flagConfirmed.compareAndSet(false,true)){
-				if(reservation.compareAndSet(expect,this) == false){
-					throw new IllegalStateException("foo!");
-				}
-				flagReservation.set(false);
-			}
-		}
-		
-		public void cancel()
-		{
-			if(flagConfirmed.compareAndSet(false,true)){
-				flagReservation.set(true);
-			}
-		}
-	}
-}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java	Tue Mar 17 14:08:40 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java	Fri Mar 20 15:35:53 2015 +0900
@@ -55,19 +55,19 @@
       }
 
     };
-    System.out.println("transaction");
-      InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true);
-      traverser.createIndex();
-      TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index = traverser.getIndex();
-      ParentIndex parentIndex = traverser.getParentIndex();
-      TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,index,parentIndex.getParentIndex());
+
+    InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true);
+    traverser.createIndex();
+    TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index = traverser.getIndex();
+    ParentIndex parentIndex = traverser.getParentIndex();
+    TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,index,parentIndex.getParentIndex());
 
     if  (repository.compareAndSet(newTreeContext.prev(),newTreeContext)) {
         TransactionManager txManager = new DefaultTransactionManager(writer, newTreeContext, repository, uuid);
         return DefaultEither.newB(txManager);
     }
 
-      return DefaultEither.newA((Error) new DefaultError());
+    return DefaultEither.newA((Error) new DefaultError());
   }
 
   @Override
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java	Tue Mar 17 14:08:40 2015 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
-
-public interface TreeContext
-{
-	public ChangeSet getChangeSet();
-	public TreeNode getTreeNode();
-}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexManager.java	Tue Mar 17 14:08:40 2015 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index;
-
-
-
-import fj.data.TreeMap;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultChangeSet;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
-
-public class IndexManager {
-
-	AtomicReservableReference<TreeContext>.Reservation reservation;
-	
-	public IndexManager(AtomicReservableReference<TreeContext>.Reservation reservation){
-		this.reservation = reservation;
-	}
-	
-	public void commit(TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index, ParentIndex parentIndex){
-		TreeContext tc = reservation.get();
-		ChangeSet cs = tc.getChangeSet();
-		TreeNode root = cs.getRoot();
-		ChangeSet prev = cs.prev();
-		ChangeList cl = cs.getChangeList();
-		String uuid = cs.uuid();
-		String treeName = cs.getTreeName();
-		long revision = cs.revision();
-		DefaultChangeSet newCs = new DefaultChangeSet(root, prev, cl, uuid, treeName, revision, index, parentIndex.getParentIndex());
-		DefaultTreeContext newTs = new DefaultTreeContext(root, newCs);
-		reservation.set(newTs);
-	}
-	
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/JungleBenchMark.java	Fri Mar 20 15:35:53 2015 +0900
@@ -0,0 +1,111 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.test;
+
+import fj.Ord;
+import fj.data.TreeMap;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.*;
+import java.nio.ByteBuffer;
+import java.util.Random;
+
+/**
+ * Created by e115731 on 15/03/20.
+ */
+public class JungleBenchMark {
+    public static void main(String[] args) throws InterruptedException, IOException, ParserConfigurationException, SAXException {
+
+
+        if (args.length == 0) {
+            System.out.println("args read or find");
+            System.exit(0);
+        }
+
+        Jungle jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));
+        JungleTree tree = jungle.createNewTree("Person");
+        JungleTreeEditor editor = tree.getTreeEditor();
+        JungleTreeEditor newEditor = createTree(0,new DefaultNodePath(),editor);
+        if (newEditor.success().isA()) {
+            System.out.println("success faild");
+            System.exit(1);
+        }
+
+        Runtime rt = Runtime.getRuntime();
+        int cpuNum = rt.availableProcessors();
+
+
+        File file = new File("./time/JungleTree" + args[0] + "Time");
+
+        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
+
+        JungleBenchMarkThread readThread[] = null;
+
+        for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) {
+            readThread = new JungleBenchMarkThread[THREAD_COUNT];
+
+            if (args[0].equals("read")) {
+                for (int count = 0; THREAD_COUNT > count; count++) {
+                    readThread[count] = new readTreeAttributeThread(tree);
+                }
+            } else if (args[0].equals("find")) {
+                for (int count = 0; THREAD_COUNT > count; count++) {
+                    readThread[count] = new findTreeAttributeThread(tree);
+                }
+            } else {
+                System.out.println("not allow args");
+                System.exit(0);
+            }
+
+            for (int count = 0; THREAD_COUNT > count; count++) {
+                readThread[count].start();
+            }
+
+            System.out.println("StartThread");
+
+            Thread.sleep(1000);
+            long readCount = 0;
+
+            for (int count = 0; THREAD_COUNT > count; count++) {
+                readCount = readCount + readThread[count].getFindCount();
+                readThread[count].set(false);
+            }
+
+            pw.println(THREAD_COUNT + " " + readCount);
+            System.out.println(THREAD_COUNT + "readCount = " + readCount);
+        }
+
+        pw.close();
+    }
+
+    static Integer nodeNum = 0;
+    public static JungleTreeEditor createTree(int deep, NodePath path, JungleTreeEditor editor) {
+
+        Random rnd = new Random();
+        String value1 = String.valueOf(nodeNum);
+        nodeNum ++;
+        String value2 = String.valueOf(nodeNum);
+        nodeNum ++;
+
+        if (value1.equals("500"))
+            System.out.println("aaa");
+        editor = editor.addNewChildAt(path, 0).b();
+        editor = editor.putAttribute(path.add(0), "key", ByteBuffer.wrap(value1.getBytes())).b();
+        editor = editor.addNewChildAt(path, 1).b();
+        editor = editor.putAttribute(path.add(1), "key", ByteBuffer.wrap(value2.getBytes())).b();
+        deep++;
+
+        if (deep < 10) {
+            editor = createTree(deep, path.add(0), editor);
+            editor = createTree(deep, path.add(1), editor);
+        }
+        return editor;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/findTreeAttributeThread.java	Fri Mar 20 15:35:53 2015 +0900
@@ -0,0 +1,55 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.test;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
+
+import java.util.Iterator;
+
+/**
+ * Created by e115731 on 15/03/20.
+ */
+public class findTreeAttributeThread extends JungleBenchMarkThread {
+
+    JungleTree tree;
+    InterfaceTraverser traverser;
+    private long findCount;
+
+    boolean loop = true;
+
+    public findTreeAttributeThread(JungleTree tree) {
+        this.tree = tree;
+        this.traverser = tree.getTraverser(false);
+        this.findCount = 0;
+    }
+
+    @Override
+    public long getFindCount() {
+        System.out.println("thread count = " + findCount);
+        return findCount;
+    }
+
+    public void set(boolean loop) {
+        this.loop = loop;
+    }
+
+    @Override
+    public void run() {
+        while (loop) {
+
+            Iterator<TreeNode> it = traverser.find((TreeNode node) -> {
+                String nodeNum = node.getAttributes().getString("key");
+                if (nodeNum == null)
+                    return false;
+                if (nodeNum.equals("8"))
+                        return true;
+                return false;
+                    }, "key","8");
+
+            if (it.hasNext())
+                findCount++;
+            else
+                System.out.println("faild");
+        }
+    }
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/readTreeAttributeThread.java	Tue Mar 17 14:08:40 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/test/readTreeAttributeThread.java	Fri Mar 20 15:35:53 2015 +0900
@@ -36,9 +36,9 @@
                 findCount++;
                    String attribute = root.getAttributes().getString("test");
                  if (attribute.equals("test"))
-                      findCount++;
-                  else
-                     System.out.println("faild");
+                   findCount++;
+                 else
+                   System.out.println("faild");
         }
     }
 }