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/07/09 01:11:29 UTC

incubator-mnemonic git commit: MNEMONIC-55: A Print Computing Service

Repository: incubator-mnemonic
Updated Branches:
  refs/heads/master 9f24eccea -> 56e086cf8


MNEMONIC-55: A Print Computing Service


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

Branch: refs/heads/master
Commit: 56e086cf8c2393a898f49426272ec4450344a094
Parents: 9f24ecc
Author: Wang, Gang(Gary) <ga...@intel.com>
Authored: Fri Jul 8 14:50:37 2016 -0700
Committer: Wang, Gang(Gary) <ga...@intel.com>
Committed: Fri Jul 8 18:01:30 2016 -0700

----------------------------------------------------------------------
 build-tools/mnemonic-checkstyle.xml             |  4 +-
 .../src/main/native/common.c                    | 45 ++++++++++++++++++
 .../src/main/native/common.h                    | 20 ++++++++
 ...computingservice_internal_PrintServiceImpl.c | 50 ++++++++++++++++++--
 .../DurableNodeValueNGPrintTest.java            | 21 ++++----
 .../service/computingservice/Person.java        | 10 ++--
 .../main/java/org/apache/mnemonic/Utils.java    |  4 +-
 7 files changed, 134 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/56e086cf/build-tools/mnemonic-checkstyle.xml
----------------------------------------------------------------------
diff --git a/build-tools/mnemonic-checkstyle.xml b/build-tools/mnemonic-checkstyle.xml
index 9c84c59..e6b40ab 100644
--- a/build-tools/mnemonic-checkstyle.xml
+++ b/build-tools/mnemonic-checkstyle.xml
@@ -101,7 +101,9 @@
         <module name="OperatorWrap"/>
         <module name="ParenPad"/>
         <module name="TypecastParenPad"/>
-        <module name="WhitespaceAfter"/>
+        <module name="WhitespaceAfter">
+            <property name="tokens" value="COMMA, SEMI"/>
+        </module>
         <module name="WhitespaceAround"/>
 
 

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/56e086cf/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
----------------------------------------------------------------------
diff --git a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
index 82387d8..0516743 100644
--- a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
+++ b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
@@ -303,4 +303,49 @@ inline long to_p(JNIEnv* env, struct NValueInfo *nvinfo, void *e) {
   return -1L;
 }
 
+void iterMatrix(JNIEnv* env, struct NValueInfo *nvinfo, size_t dims[], long hdls[],
+    size_t dimidx, valueHandler valhandler) {
+  void *addr = NULL;
+  long curoff = (nvinfo->frames + dimidx)->nextoff;
+  long curnloff = (nvinfo->frames + dimidx)->nlvloff;
+  long curnlsz = (nvinfo->frames + dimidx)->nlvlsz;
+  if (dimidx < nvinfo->framessz - 1) {
+    while(0L != hdls[dimidx]) {
+      hdls[dimidx + 1] = *(long*)(to_e(env, nvinfo, hdls[dimidx]) + curnloff);
+      iterMatrix(env, nvinfo, dims, hdls, dimidx + 1, valhandler);
+      hdls[dimidx] = *(long*)(to_e(env, nvinfo, hdls[dimidx]) + curoff);
+      ++dims[dimidx];
+    }
+    dims[dimidx] = 0;
+  } else {
+    if (-1L != curoff) {
+      while(0L != hdls[dimidx]) {
+        addr = to_e(env, nvinfo, hdls[dimidx]) + curnloff;
+        valhandler(env, dims, dimidx + 1, addr, curnlsz, nvinfo->dtype);
+        hdls[dimidx] = *(long*)(to_e(env, nvinfo, hdls[dimidx]) + curoff);
+        ++dims[dimidx];
+      }
+      dims[dimidx] = 0;
+    } else {
+      addr = to_e(env, nvinfo, hdls[dimidx]) + curnloff;
+      valhandler(env, dims, dimidx, addr, curnlsz, nvinfo->dtype);
+    }
+  }
+}
+
+int handleValueInfo(JNIEnv* env, struct NValueInfo *nvinfo, valueHandler valhandler) {
+  if (NULL == nvinfo->frames || 0 == nvinfo->framessz) {
+    return -1;
+  }
+  size_t dims[nvinfo->framessz];
+  long hdls[nvinfo->framessz];
+  size_t i, di = 0;
+  for (i = 0; i < nvinfo->framessz; ++i) {
+    dims[i] = 0;
+    hdls[i] = 0L;
+  }
+  hdls[di] = nvinfo->handler;
+  iterMatrix(env, nvinfo, dims, hdls, 0, valhandler);
+  return 0;
+}
 

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/56e086cf/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.h
----------------------------------------------------------------------
diff --git a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.h b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.h
index 75feef7..bef9ee4 100644
--- a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.h
+++ b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.h
@@ -36,6 +36,19 @@ extern "C" {
 #include <pthread.h>
 #include <jni.h>
 
+#define DURABLE_BOOLEAN 1
+#define DURABLE_CHARACTER 2
+#define DURABLE_BYTE 3
+#define DURABLE_SHORT 4
+#define DURABLE_INTEGER 5
+#define DURABLE_LONG 6
+#define DURABLE_FLOAT 7
+#define DURABLE_DOUBLE 8
+#define DURABLE_STRING 9
+#define DURABLE_DURABLE 10
+#define DURABLE_BUFFER 11
+#define DURABLE_CHUNK 12
+
 void throw(JNIEnv* env, const char* msg);
 
 void* addr_from_java(jlong addr);
@@ -64,17 +77,24 @@ struct NValueInfo {
   int dtype;
 };
 
+typedef void (*valueHandler)(JNIEnv* env, size_t dims[], size_t dimsz,
+    void *addr, size_t sz, int dtype);
+
 struct NValueInfo **constructNValueInfos(JNIEnv* env,
     jobjectArray vinfos, size_t *sz);
 
 void destructNValueInfos(struct NValueInfo **nvalinfos, size_t sz);
 
+void printNValueInfos(struct NValueInfo **nvalinfos, size_t sz);
+
 jlongArray constructJLongArray(JNIEnv* env, long arr[], size_t sz);
 
 inline void *to_e(JNIEnv* env, struct NValueInfo *nvinfo, long p);
 
 inline long to_p(JNIEnv* env, struct NValueInfo *nvinfo, void *e);
 
+int handleValueInfo(JNIEnv* env, struct NValueInfo *nvinfo, valueHandler valhandler);
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/56e086cf/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/org_apache_mnemonic_service_computingservice_internal_PrintServiceImpl.c
----------------------------------------------------------------------
diff --git a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/org_apache_mnemonic_service_computingservice_internal_PrintServiceImpl.c b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/org_apache_mnemonic_service_computingservice_internal_PrintServiceImpl.c
index f3e72fb..e5adb19 100644
--- a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/org_apache_mnemonic_service_computingservice_internal_PrintServiceImpl.c
+++ b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/org_apache_mnemonic_service_computingservice_internal_PrintServiceImpl.c
@@ -22,6 +22,45 @@
  ** JNI implementations
  *****************************************************************************/
 
+void valHandler(JNIEnv* env, size_t dims[], size_t dimsz,
+    void *addr, size_t sz, int dtype) {
+  size_t i;
+  if (0 == dims[dimsz - 1]) {
+    printf("\n");
+  }
+  for (i = 0; i < dimsz; ++i) {
+    printf("[%zu]", dims[i]);
+  }
+  switch(dtype) {
+  case DURABLE_BOOLEAN:
+    printf(" %s, ", (0 == *(char*)addr ? "T" : "F"));
+    break;
+  case DURABLE_CHARACTER:
+    printf(" %c, ", *(char*)addr);
+    break;
+  case DURABLE_BYTE:
+    printf(" %d, ", *(char*)addr);
+    break;
+  case DURABLE_SHORT:
+    printf(" %d, ", *(short*)addr);
+    break;
+  case DURABLE_INTEGER:
+    printf(" %d, ", *(int*)addr);
+    break;
+  case DURABLE_LONG:
+    printf(" %ld, ", *(long*)addr);
+    break;
+  case DURABLE_FLOAT:
+    printf(" %f, ", *(float*)addr);
+    break;
+  case DURABLE_DOUBLE:
+    printf(" %f, ", *(double*)addr);
+    break;
+  default:
+    printf(" (NA), ");
+  }
+}
+
 JNIEXPORT
 jlongArray JNICALL Java_org_apache_mnemonic_service_computingservice_internal_PrintServiceImpl_nperformPrint(JNIEnv* env,
     jobject this, jobjectArray vinfos) {
@@ -34,10 +73,15 @@ jlongArray JNICALL Java_org_apache_mnemonic_service_computingservice_internal_Pr
   }
   size_t visz;
   struct NValueInfo **nvinfos = constructNValueInfos(env, vinfos, &visz);
-
-
-  printf("----Service Native Parameters----\n");
   printNValueInfos(nvinfos, visz);
+  for(idx = 0; idx < visz; ++idx) {
+    printf("-- Value Matrix #%u --\n", idx);
+    if (NULL != nvinfos + idx) {
+      handleValueInfo(env, *(nvinfos + idx), valHandler);
+    } else {
+      printf("NULL\n");
+    }
+  }
 
   ret = constructJLongArray(env, nret, retsz);
   destructNValueInfos(nvinfos, visz);

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/56e086cf/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/DurableNodeValueNGPrintTest.java
----------------------------------------------------------------------
diff --git a/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/DurableNodeValueNGPrintTest.java b/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/DurableNodeValueNGPrintTest.java
index 99ef331..95dbab0 100644
--- a/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/DurableNodeValueNGPrintTest.java
+++ b/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/DurableNodeValueNGPrintTest.java
@@ -93,6 +93,9 @@ public class DurableNodeValueNGPrintTest {
       person.setAge((short) m_rand.nextInt(50));
       person.setName(String.format("Name: [%s]", Utils.genRandomString()), true);
       nextnv.setItem(person, false);
+      if (i + 1 == elem_count) {
+        break;
+      }
       newnv = DurableNodeValueFactory.create(m_act, listefproxies, listgftypes, false);
       nextnv.setNext(newnv, false);
       nextnv = newnv;
@@ -100,26 +103,28 @@ public class DurableNodeValueNGPrintTest {
 
     Person<Long> eval;
     DurableNodeValue<Person<Long>> iternv = firstnv;
+    System.out.printf(" -- Stage 1 Generated---\n");
     while (null != iternv) {
-      System.out.printf(" Stage 1 --->\n");
       eval = iternv.getItem();
       if (null != eval) {
-        eval.testOutput();
+        eval.testOutputAge();
       }
       iternv = iternv.getNext();
     }
+    System.out.printf("\n");
 
     long handler = firstnv.getHandler();
 
     DurableNodeValue<Person<Long>> firstnv2 = DurableNodeValueFactory.restore(m_act, listefproxies, listgftypes,
         handler, false);
 
+    System.out.printf("--- Stage 2 Restored--- \n");
     for (Person<Long> eval2 : firstnv2) {
-      System.out.printf(" Stage 2 ---> \n");
       if (null != eval2) {
-        eval2.testOutput();
+        eval2.testOutputAge();
       }
     }
+    System.out.printf("\n");
 
     GeneralComputingService gcsvr = Utils.getGeneralComputingService("print");
     ValueInfo vinfo = new ValueInfo();
@@ -129,13 +134,10 @@ public class DurableNodeValueNGPrintTest {
     long[][] fidinfostack = {{2L, 1L}, {0L, 1L}};
     vinfo.handler = handler;
     vinfo.transtable = m_act.getTranslateTable();
-    vinfo.dtype = DurableType.INTEGER;
+    vinfo.dtype = DurableType.SHORT;
     vinfo.frames = Utils.genNativeParamForm(objstack, fidinfostack);
     ValueInfo[] vinfos = {vinfo};
     gcsvr.perform(vinfos);
-    System.out.printf("ObjStack: %s \n", Arrays.deepToString(objstack.toArray()));
-    System.out.printf("FidStack: %s \n", Arrays.deepToString(fidinfostack));
-    System.out.printf("ParamFrame: %s \n", Arrays.deepToString(vinfo.frames));
 
   }
 
@@ -230,9 +232,6 @@ public class DurableNodeValueNGPrintTest {
     vinfo.frames = Utils.genNativeParamForm(objstack, fidinfostack);
     ValueInfo[] vinfos = {vinfo};
     gcsvr.perform(vinfos);
-    System.out.printf("ObjStack: %s \n", Arrays.deepToString(objstack.toArray()));
-    System.out.printf("FidStack: %s \n", Arrays.deepToString(fidinfostack));
-    System.out.printf("ParamFrame: %s \n", Arrays.deepToString(vinfo.frames));
 
     // Assert.assert, expected);(plist, plist2);
 

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/56e086cf/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/Person.java
----------------------------------------------------------------------
diff --git a/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/Person.java b/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/Person.java
index b3f990d..6bc1725 100644
--- a/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/Person.java
+++ b/mnemonic-computing-services/mnemonic-utilities-service/src/test/java/org/apache/mnemonic/service/computingservice/Person.java
@@ -57,10 +57,14 @@ public abstract class Person<E> implements Durable, Comparable<Person<E>> {
         null == getMother() ? "No Recorded Mother" : "Has Recorded Mother");
   }
 
+  public void testOutputAge() throws RetrieveDurableEntityError {
+    System.out.printf("(Person %s, Age: %d) ", getName(), getAge());
+  }
+
   public int compareTo(Person<E> anotherPerson) {
     int ret = 0;
     if (0 == ret) {
-      ret = getAge().compareTo(anotherPerson.getAge());
+      ret = ((Short)getAge()).compareTo(anotherPerson.getAge());
     }
     if (0 == ret) {
       ret = getName().compareTo(anotherPerson.getName());
@@ -69,10 +73,10 @@ public abstract class Person<E> implements Durable, Comparable<Person<E>> {
   }
 
   @DurableGetter(Id = 1L)
-  public abstract Short getAge();
+  public abstract short getAge();
 
   @DurableSetter
-  public abstract void setAge(Short age);
+  public abstract void setAge(short age);
 
   @DurableGetter(Id = 2L)
   public abstract String getName() throws RetrieveDurableEntityError;

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/56e086cf/mnemonic-core/src/main/java/org/apache/mnemonic/Utils.java
----------------------------------------------------------------------
diff --git a/mnemonic-core/src/main/java/org/apache/mnemonic/Utils.java b/mnemonic-core/src/main/java/org/apache/mnemonic/Utils.java
index aace424..6e66cfd 100644
--- a/mnemonic-core/src/main/java/org/apache/mnemonic/Utils.java
+++ b/mnemonic-core/src/main/java/org/apache/mnemonic/Utils.java
@@ -425,8 +425,8 @@ public class Utils {
       throw new IllegalArgumentException("the length of field id array is not exactly 2");
     }
     for (int idx = 0; idx < fidinfo.length; ++idx) {
-      ret[idx * 2] = 0;
-      ret[idx * 2 + 1] = 0;
+      ret[idx * 2] = -1L;
+      ret[idx * 2 + 1] = 0L;
       fid = fidinfo[idx];
       if (fid <= 0) {
         if (allowfidnull && 0 == idx) {