You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mnemonic.apache.org by ga...@apache.org on 2016/03/31 20:16:55 UTC

[1/2] incubator-mnemonic git commit: add info for native code retrieval

Repository: incubator-mnemonic
Updated Branches:
  refs/heads/native_computing_featured d6f32fb51 -> 5918930d6


add info for native code retrieval


Project: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/commit/36e41018
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/tree/36e41018
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/diff/36e41018

Branch: refs/heads/native_computing_featured
Commit: 36e4101809d8945c8464a8a8a84058e8efcbbb25
Parents: d6f32fb
Author: Wang, Gang(Gary) <ga...@intel.com>
Authored: Tue Mar 29 22:33:25 2016 -0700
Committer: Wang, Gang(Gary) <ga...@intel.com>
Committed: Tue Mar 29 22:33:25 2016 -0700

----------------------------------------------------------------------
 .../AnnotatedNonVolatileEntityClass.java        | 31 ++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/36e41018/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java b/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
index bcba4e3..6ef778c 100644
--- a/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
+++ b/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
@@ -79,6 +79,7 @@ public class AnnotatedNonVolatileEntityClass {
     private Map<String, MethodInfo> m_gettersinfo = new HashMap<String, MethodInfo>();
     private Map<String, MethodInfo> m_settersinfo = new HashMap<String, MethodInfo>();
     private Map<String, FieldInfo> m_dynfieldsinfo = new HashMap<String, FieldInfo>();
+    private Map<String, FieldInfo> m_gofffieldsinfo = new HashMap<String, FieldInfo>();
     private Map<String, FieldInfo> m_fieldsinfo = new HashMap<String, FieldInfo>();
 
     private Map<String, MethodInfo> m_durablemtdinfo = new HashMap<String, MethodInfo>();
@@ -419,6 +420,29 @@ public class AnnotatedNonVolatileEntityClass {
 	return ret;
     }
 	
+    protected void buildGFieldsSpecs() throws AnnotationProcessingException {
+        FieldInfo dynfieldinfo, fieldinfo;
+        for (String name : m_gettersinfo.keySet()) {
+            dynfieldinfo = m_dynfieldsinfo.get(name);
+
+            fieldinfo = new FieldInfo();
+            fieldinfo.name = String.format("MNEMONIC_%s_OFF",
+                               name.toUpperCase());
+            fieldinfo.type = TypeName.get(m_typeutils.getPrimitiveType(TypeKind.LONG));
+            fieldinfo.specbuilder = FieldSpec.builder(fieldinfo.type,
+                                  fieldinfo.name, Modifier.PUBLIC, Modifier.FINAL, Modifier.STATIC).initializer("$LL", dynfieldinfo.fieldoff);
+            m_gofffieldsinfo.put(fieldinfo.name, fieldinfo);
+
+            fieldinfo = new FieldInfo();
+            fieldinfo.name = String.format("MNEMONIC_%s_SZ",
+                               name.toUpperCase());
+            fieldinfo.type = TypeName.get(m_typeutils.getPrimitiveType(TypeKind.LONG));
+            fieldinfo.specbuilder = FieldSpec.builder(fieldinfo.type,
+                                  fieldinfo.name, Modifier.PUBLIC, Modifier.FINAL, Modifier.STATIC).initializer("$LL", dynfieldinfo.fieldsize);
+            m_gofffieldsinfo.put(fieldinfo.name, fieldinfo);
+        }
+    }
+
     protected void buildGettersSpecs(TypeSpec.Builder typespecbuilder) throws AnnotationProcessingException {
 	MethodInfo methodinfo;
 	TypeName ftname;
@@ -862,10 +886,13 @@ public class AnnotatedNonVolatileEntityClass {
 	for (TypeParameterElement tpe : m_elem.getTypeParameters()) {
 	    entitybuilder.addTypeVariable(TypeVariableName.get(tpe));
 	}
-		
+
 	buildFieldSpecs(entitybuilder, m_dynfieldsinfo); 
 	buildFieldSpecs(entitybuilder, m_fieldsinfo);
-		
+
+	buildGFieldsSpecs();
+	buildFieldSpecs(entitybuilder, m_gofffieldsinfo);
+
 	buildGettersSpecs(entitybuilder);
 	buildSettersSpecs(entitybuilder);
 


[2/2] incubator-mnemonic git commit: add facilites to support native computing.

Posted by ga...@apache.org.
add facilites to support native computing.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/commit/5918930d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/tree/5918930d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/diff/5918930d

Branch: refs/heads/native_computing_featured
Commit: 5918930d6b7d17389256564a576ed0373092a6aa
Parents: 36e4101
Author: Wang, Gang(Gary) <ga...@intel.com>
Authored: Wed Mar 30 16:14:54 2016 -0700
Committer: Wang, Gang(Gary) <ga...@intel.com>
Committed: Wed Mar 30 16:14:54 2016 -0700

----------------------------------------------------------------------
 .../collections/NonVolatileNodeValue.java       |  4 +-
 .../intel/bigdatamem/collections/Person.java    |  8 ++--
 .../AnnotatedNonVolatileEntityClass.java        | 43 ++++++++++----------
 .../main/java/com/intel/bigdatamem/Durable.java |  8 ++++
 .../java/com/intel/bigdatamem/GenericField.java |  8 ++++
 .../com/intel/bigdatamem/NonVolatileGetter.java |  1 +
 .../main/java/com/intel/bigdatamem/Utils.java   | 30 ++++++++++++++
 7 files changed, 74 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/5918930d/collections/src/main/java/com/intel/bigdatamem/collections/NonVolatileNodeValue.java
----------------------------------------------------------------------
diff --git a/collections/src/main/java/com/intel/bigdatamem/collections/NonVolatileNodeValue.java b/collections/src/main/java/com/intel/bigdatamem/collections/NonVolatileNodeValue.java
index e05e84a..14797d3 100644
--- a/collections/src/main/java/com/intel/bigdatamem/collections/NonVolatileNodeValue.java
+++ b/collections/src/main/java/com/intel/bigdatamem/collections/NonVolatileNodeValue.java
@@ -54,7 +54,7 @@ public abstract class NonVolatileNodeValue<E>
      *
      * @return the item value of this node
      */
-    @NonVolatileGetter(EntityFactoryProxies = "m_node_efproxies", GenericFieldTypes = "m_node_gftypes")
+    @NonVolatileGetter(Id = 1L, EntityFactoryProxies = "m_node_efproxies", GenericFieldTypes = "m_node_gftypes")
     abstract public E getItem();
 
     /**
@@ -76,7 +76,7 @@ public abstract class NonVolatileNodeValue<E>
      * @return the next node
      *
      */
-    @NonVolatileGetter(EntityFactoryProxies = "m_node_efproxies", GenericFieldTypes = "m_node_gftypes")
+    @NonVolatileGetter(Id = 2L, EntityFactoryProxies = "m_node_efproxies", GenericFieldTypes = "m_node_gftypes")
     abstract public NonVolatileNodeValue<E> getNext();
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/5918930d/collections/src/test/java/com/intel/bigdatamem/collections/Person.java
----------------------------------------------------------------------
diff --git a/collections/src/test/java/com/intel/bigdatamem/collections/Person.java b/collections/src/test/java/com/intel/bigdatamem/collections/Person.java
index fe0864f..3c2cc28 100644
--- a/collections/src/test/java/com/intel/bigdatamem/collections/Person.java
+++ b/collections/src/test/java/com/intel/bigdatamem/collections/Person.java
@@ -42,22 +42,22 @@ public abstract class Person<E> implements Durable, Comparable<Person<E>> {
 		return ret;
 	}
 
-	@NonVolatileGetter
+	@NonVolatileGetter(Id = 1L)
 	abstract public Short getAge();
 	@NonVolatileSetter
 	abstract public void setAge(Short age);
 	
-	@NonVolatileGetter
+	@NonVolatileGetter(Id = 2L)
 	abstract public String getName() throws RetrieveNonVolatileEntityError;
 	@NonVolatileSetter
 	abstract public void setName(String name, boolean destroy) throws OutOfPersistentMemory, RetrieveNonVolatileEntityError;
 	
-	@NonVolatileGetter
+	@NonVolatileGetter(Id = 3L)
 	abstract public Person<E> getMother() throws RetrieveNonVolatileEntityError;
 	@NonVolatileSetter
 	abstract public void setMother(Person<E> mother, boolean destroy) throws RetrieveNonVolatileEntityError;
 	
-	@NonVolatileGetter
+	@NonVolatileGetter(Id = 4L)
 	abstract public Person<E> getFather() throws RetrieveNonVolatileEntityError;
 	@NonVolatileSetter
 	abstract public void setFather(Person<E> mother, boolean destroy) throws RetrieveNonVolatileEntityError;

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/5918930d/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java b/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
index 6ef778c..5c80645 100644
--- a/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
+++ b/core/src/main/java/com/intel/bigdatamem/AnnotatedNonVolatileEntityClass.java
@@ -42,6 +42,7 @@ public class AnnotatedNonVolatileEntityClass {
     protected class FieldInfo {
 	public FieldSpec.Builder specbuilder;
 	public TypeName type;
+    public long id;
 	public String name;
 	public String efproxiesname;
 	public String gftypesname;
@@ -79,7 +80,6 @@ public class AnnotatedNonVolatileEntityClass {
     private Map<String, MethodInfo> m_gettersinfo = new HashMap<String, MethodInfo>();
     private Map<String, MethodInfo> m_settersinfo = new HashMap<String, MethodInfo>();
     private Map<String, FieldInfo> m_dynfieldsinfo = new HashMap<String, FieldInfo>();
-    private Map<String, FieldInfo> m_gofffieldsinfo = new HashMap<String, FieldInfo>();
     private Map<String, FieldInfo> m_fieldsinfo = new HashMap<String, FieldInfo>();
 
     private Map<String, MethodInfo> m_durablemtdinfo = new HashMap<String, MethodInfo>();
@@ -151,6 +151,7 @@ public class AnnotatedNonVolatileEntityClass {
 	m_durablemtdinfo.put("getNonVolatileHandler", new MethodInfo());
 	m_durablemtdinfo.put("autoReclaim", new MethodInfo());
 	m_durablemtdinfo.put("destroy", new MethodInfo());
+	m_durablemtdinfo.put("getNativeFieldInfo", new MethodInfo());
 
 	m_entitymtdinfo.put("initializeNonVolatileEntity", new MethodInfo());
 	m_entitymtdinfo.put("createNonVolatileEntity", new MethodInfo());
@@ -227,7 +228,6 @@ public class AnnotatedNonVolatileEntityClass {
 						  fieldinfo.name, Modifier.PRIVATE);
 	m_fieldsinfo.put("genericfield", fieldinfo);
 
-		
 	for (Element elem : m_elem.getEnclosedElements()) {
 	    if (elem.getKind() == ElementKind.METHOD) {
 		methodname = elem.getSimpleName().toString();
@@ -269,6 +269,7 @@ public class AnnotatedNonVolatileEntityClass {
 		    fieldoff += fieldinfo.fieldsize;
 		    fieldinfo.efproxiesname = pgetter.EntityFactoryProxies();
 		    fieldinfo.gftypesname = pgetter.GenericFieldTypes();
+		    fieldinfo.id = pgetter.Id();
 		    m_dynfieldsinfo.put(methodname.substring(3), fieldinfo);
 					
 		}
@@ -352,6 +353,7 @@ public class AnnotatedNonVolatileEntityClass {
 		}
 	    }
 	}
+	genNFieldInfo();
     }
 
     protected String transTypeToUnsafeMethod(TypeName tname, boolean isget) throws AnnotationProcessingException {
@@ -420,27 +422,24 @@ public class AnnotatedNonVolatileEntityClass {
 	return ret;
     }
 	
-    protected void buildGFieldsSpecs() throws AnnotationProcessingException {
+    protected void genNFieldInfo() {
         FieldInfo dynfieldinfo, fieldinfo;
+        List<long[]> finfo = new ArrayList<long[]>();
         for (String name : m_gettersinfo.keySet()) {
             dynfieldinfo = m_dynfieldsinfo.get(name);
-
-            fieldinfo = new FieldInfo();
-            fieldinfo.name = String.format("MNEMONIC_%s_OFF",
-                               name.toUpperCase());
-            fieldinfo.type = TypeName.get(m_typeutils.getPrimitiveType(TypeKind.LONG));
-            fieldinfo.specbuilder = FieldSpec.builder(fieldinfo.type,
-                                  fieldinfo.name, Modifier.PUBLIC, Modifier.FINAL, Modifier.STATIC).initializer("$LL", dynfieldinfo.fieldoff);
-            m_gofffieldsinfo.put(fieldinfo.name, fieldinfo);
-
-            fieldinfo = new FieldInfo();
-            fieldinfo.name = String.format("MNEMONIC_%s_SZ",
-                               name.toUpperCase());
-            fieldinfo.type = TypeName.get(m_typeutils.getPrimitiveType(TypeKind.LONG));
-            fieldinfo.specbuilder = FieldSpec.builder(fieldinfo.type,
-                                  fieldinfo.name, Modifier.PUBLIC, Modifier.FINAL, Modifier.STATIC).initializer("$LL", dynfieldinfo.fieldsize);
-            m_gofffieldsinfo.put(fieldinfo.name, fieldinfo);
+            if (dynfieldinfo.id > 0) {
+                finfo.add(new long[]{dynfieldinfo.id, dynfieldinfo.fieldoff, dynfieldinfo.fieldsize});
+            }
         }
+
+        fieldinfo = new FieldInfo();
+        fieldinfo.name = String.format("m_nfieldinfo_%s",
+                           Utils.genRandomString());
+        fieldinfo.type = ArrayTypeName.of(ArrayTypeName.of(TypeName.LONG));
+        String initlstr = Utils.toInitLiteral(finfo);
+        fieldinfo.specbuilder = FieldSpec.builder(fieldinfo.type,
+                              fieldinfo.name, Modifier.PRIVATE, Modifier.STATIC).initializer("$1L", initlstr);
+        m_fieldsinfo.put("nfieldinfo", fieldinfo);
     }
 
     protected void buildGettersSpecs(TypeSpec.Builder typespecbuilder) throws AnnotationProcessingException {
@@ -678,6 +677,9 @@ public class AnnotatedNonVolatileEntityClass {
 		    }
 		}				
 		break;
+        case "getNativeFieldInfo" :
+        code.addStatement("return $1N", m_fieldsinfo.get("nfieldinfo").name);
+        break;
 	    default:
 		throw new AnnotationProcessingException(null, "Method %s is not supported.",
 							name);
@@ -890,9 +892,6 @@ public class AnnotatedNonVolatileEntityClass {
 	buildFieldSpecs(entitybuilder, m_dynfieldsinfo); 
 	buildFieldSpecs(entitybuilder, m_fieldsinfo);
 
-	buildGFieldsSpecs();
-	buildFieldSpecs(entitybuilder, m_gofffieldsinfo);
-
 	buildGettersSpecs(entitybuilder);
 	buildSettersSpecs(entitybuilder);
 

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/5918930d/core/src/main/java/com/intel/bigdatamem/Durable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/intel/bigdatamem/Durable.java b/core/src/main/java/com/intel/bigdatamem/Durable.java
index 6bc6faf..5021daa 100644
--- a/core/src/main/java/com/intel/bigdatamem/Durable.java
+++ b/core/src/main/java/com/intel/bigdatamem/Durable.java
@@ -63,4 +63,12 @@ public interface Durable {
      *
      */
     public void destroy() throws RetrieveNonVolatileEntityError;
+
+    /**
+     * return the native field map info for native processing.
+     *
+     * @return the native field map info
+     *
+     */
+    public long[][] getNativeFieldInfo();
 }

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/5918930d/core/src/main/java/com/intel/bigdatamem/GenericField.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/intel/bigdatamem/GenericField.java b/core/src/main/java/com/intel/bigdatamem/GenericField.java
index 528687d..95885dd 100644
--- a/core/src/main/java/com/intel/bigdatamem/GenericField.java
+++ b/core/src/main/java/com/intel/bigdatamem/GenericField.java
@@ -277,4 +277,12 @@ public class GenericField<A extends CommonPersistAllocator<A>, E> implements Dur
     public void setupGenericInfo(EntityFactoryProxy[] efproxies, GType[] gftypes) {
 	throw new UnsupportedOperationException("GenericField.setupGenericInfo()");
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public long[][] getNativeFieldInfo() {
+        throw new UnsupportedOperationException("getNativeFieldInfo() on Generic Field.");
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/5918930d/core/src/main/java/com/intel/bigdatamem/NonVolatileGetter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/intel/bigdatamem/NonVolatileGetter.java b/core/src/main/java/com/intel/bigdatamem/NonVolatileGetter.java
index 95bc036..e4ad7f7 100644
--- a/core/src/main/java/com/intel/bigdatamem/NonVolatileGetter.java
+++ b/core/src/main/java/com/intel/bigdatamem/NonVolatileGetter.java
@@ -14,4 +14,5 @@ import java.lang.annotation.Target;
 public @interface NonVolatileGetter {
     String EntityFactoryProxies() default "null";
     String GenericFieldTypes() default "null";
+    long Id() default -1L;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/5918930d/core/src/main/java/com/intel/bigdatamem/Utils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/intel/bigdatamem/Utils.java b/core/src/main/java/com/intel/bigdatamem/Utils.java
index 06336fb..cc7bbf0 100644
--- a/core/src/main/java/com/intel/bigdatamem/Utils.java
+++ b/core/src/main/java/com/intel/bigdatamem/Utils.java
@@ -3,12 +3,15 @@ package com.intel.bigdatamem;
 import java.lang.reflect.Field;
 import java.nio.ByteBuffer;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.Random;
 import java.util.UUID;
 
 import sun.misc.Unsafe;
 import java.util.Iterator;
+import java.util.List;
 import java.util.ServiceConfigurationError;
 import java.util.ServiceLoader;
 import com.intel.mnemonic.service.allocatorservice.VolatileMemoryAllocatorService;
@@ -271,5 +274,32 @@ public class Utils {
 	return ret;
     }
 
+    /**
+     * convert a long array to a initializer literal string.
+     *
+     * @param larr
+     *          specify a long array to be converted
+     *
+     * @return a literal string represent the initializer
+     */
+    public static String toInitLiteral(long[] larr) {
+        return Arrays.toString(larr).replaceAll("\\[", "{").replaceAll("\\]", "}");
+    }
+
+    /**
+     * convert a list of long array to a initializer literal string.
+     *
+     * @param llarr
+     *          specify a list of long array to be converted
+     *
+     * @return a literal string represent the initializer
+     */
+    public static String toInitLiteral(List<long[]> llarr) {
+        List<String> slist = new ArrayList<String>();
+        for (long[] larr : llarr) {
+            slist.add(toInitLiteral(larr));
+        }
+        return "{" + String.join(",", slist) + "}";
+    }
 
 }