JigDFS modification and, clean up
authorMaximilian Quellmalz <maximilian.quellmalz@mailbox.tu-dresden.de>
Fri, 1 Aug 2014 07:56:22 +0000 (09:56 +0200)
committerMaximilian Quellmalz <maximilian.quellmalz@mailbox.tu-dresden.de>
Fri, 1 Aug 2014 07:58:15 +0000 (09:58 +0200)
Splitter-ng-plugin-jerasure-purejava/.classpath
Splitter-ng-plugin-jerasure-purejava/.gitignore
Splitter-ng-plugin-jerasure-purejava/.settings/org.eclipse.jdt.core.prefs [deleted file]
Splitter-ng-plugin-jerasure/.gitignore
Splitter-ng-plugin-jerasure/.settings/org.eclipse.jdt.core.prefs [deleted file]
Splitter-ng-plugin-jigdfs/.gitignore
Splitter-ng-plugin-jigdfs/src/jigdfsplugin/CodecJigDFS.java
Splitter-ng-plugin-jigdfs/src/jigdfsplugin/SplitterPluginJigDFS.java
Splitter-ng/.gitignore

index 4ac0014..32a6788 100644 (file)
@@ -7,8 +7,6 @@
                        <attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Splitter-ng-plugin-jerasure/lib"/>
                </attributes>
        </classpathentry>
-       <classpathentry kind="lib" path="lib/guava-13.0.1.jar"/>
-       <classpathentry kind="lib" path="lib/junit-4.4.jar"/>
        <classpathentry combineaccessrules="false" kind="src" path="/Splitter-ng"/>
        <classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/Splitter-ng-plugin-jerasure-purejava/.settings/org.eclipse.jdt.core.prefs b/Splitter-ng-plugin-jerasure-purejava/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644 (file)
index 7341ab1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.7
diff --git a/Splitter-ng-plugin-jerasure/.settings/org.eclipse.jdt.core.prefs b/Splitter-ng-plugin-jerasure/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644 (file)
index 7341ab1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.7
index 205ad03..ec1d906 100644 (file)
@@ -1,4 +1,5 @@
 package jigdfsplugin;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -10,6 +11,7 @@ import org.jigdfs.ida.base.InformationDispersalCodec;
 import org.jigdfs.ida.base.InformationDispersalDecoder;
 import org.jigdfs.ida.base.InformationDispersalEncoder;
 import org.jigdfs.ida.cauchyreedsolomon.CauchyInformationDispersalCodec;
+import org.jigdfs.ida.exception.IDADecodeException;
 import org.jigdfs.ida.exception.IDAEncodeException;
 import org.jigdfs.ida.exception.IDAInvalidParametersException;
 import org.jigdfs.ida.exception.IDANotInitializedException;
@@ -45,9 +47,21 @@ public class CodecJigDFS implements SplitterCodec {
        private byte [] data_ptrs_flat;
        private List<byte[]> dataAndCoding_list;
        private byte[][] dataAndCoding_ptrs;
+       private byte [] dataAndCoding_ptrs_flat;
        
-       public CodecJigDFS(Map<String, Integer> codecParameter) {
-               
+       public CodecJigDFS(int k, int m) {
+               Map<String, Integer> codecParameter = new HashMap<String, Integer>();
+               codecParameter.put("k", k);
+               codecParameter.put("m", m);
+               codecParameter.put("packetsize", 4096);
+               init(codecParameter);
+       }
+       
+       public CodecJigDFS(Map<String, Integer> codecParameter) {
+               init(codecParameter);
+       }
+       
+       private void init(Map<String, Integer> codecParameter) {
                // Test CodecParameter
                for (Entry<String, Integer[]> requiredEntry : CodecJigDFS.codecParameterMinMax
                                .entrySet()) {
@@ -102,7 +116,7 @@ public class CodecJigDFS implements SplitterCodec {
                }
                dataAndCoding_ptrs = new byte[k+m][];
                int i = 0;
-               for (byte[] part:dataAndCoding_list){
+               for (byte[] part : dataAndCoding_list){
                        dataAndCoding_ptrs[i++]=part;
                }
                return dataAndCoding_ptrs;
@@ -110,8 +124,35 @@ public class CodecJigDFS implements SplitterCodec {
 
        @Override
        public byte[][] decode(byte[][] dataAndCoding_ptrs, boolean [] erased){
-               //decoder.process(encodedBuffers);
-               return null;
+               
+               dataAndCoding_list = new ArrayList <byte[]> (Arrays.asList(dataAndCoding_ptrs));
+               
+               //Test reuse or create new
+               int fragmentsize = dataAndCoding_ptrs[0].length;
+               if (data_ptrs_flat == null || (data_ptrs_flat.length != k * fragmentsize)){
+                       data_ptrs_flat = new byte[k * fragmentsize];
+               }
+                       
+               try {
+                       data_ptrs_flat = decoder.process(dataAndCoding_list);
+               } catch (IDANotInitializedException e) {
+                       throw new IllegalArgumentException("JigDFS IDANotInitializedException: \n"+e.toString());
+               } catch (IDADecodeException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+               
+               fragmentsize = data_ptrs_flat.length/k;
+               if (data_ptrs == null || (data_ptrs.length != k) || (data_ptrs[0].length != fragmentsize)){
+                       data_ptrs = new byte[k][fragmentsize];
+               }                       
+
+               for (int i = 0; i<k ; i++){
+                       System.arraycopy(data_ptrs_flat, i*(fragmentsize), data_ptrs[i], 0, fragmentsize);
+               }
+               
+               return data_ptrs;
+               
        }
        
        private void checkArraySizes(int fragmentsize) {
@@ -125,6 +166,12 @@ public class CodecJigDFS implements SplitterCodec {
                        data_ptrs_flat = new byte[k * fragmentsize];
                }
                
+               if (dataAndCoding_ptrs == null || (dataAndCoding_ptrs.length != k+m) || (dataAndCoding_ptrs[0].length != fragmentsize)){
+                       dataAndCoding_ptrs = new byte[k+m][fragmentsize];
+               }
+               if (dataAndCoding_ptrs_flat == null || (dataAndCoding_ptrs_flat.length != fragmentsize)){
+                       dataAndCoding_ptrs_flat = new byte[(k+m) * fragmentsize];
+               }
                
 //             if (coding_ptrs_flat == null || (coding_ptrs_flat.length != m * fragmentsize)){
 //                     coding_ptrs_flat = new byte[m * fragmentsize];
@@ -134,9 +181,6 @@ public class CodecJigDFS implements SplitterCodec {
 //                     coding_ptrs = new byte[m][fragmentsize];
 //             }
 //             
-//             if (dataAndCoding_ptrs == null || (dataAndCoding_ptrs.length != k+m) || (dataAndCoding_ptrs[0].length != fragmentsize)){
-//                     dataAndCoding_ptrs = new byte[k+m][fragmentsize];
-//             }
        }
                
 
index 02eca5f..3fd6366 100644 (file)
@@ -3,6 +3,12 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.xml.bind.DatatypeConverter;
+
+import org.bouncycastle.util.encoders.Hex;
+import org.bouncycastle.util.encoders.HexEncoder;
 
 import splitterng.plugin.CodecDescription;
 import splitterng.plugin.PluginDescription;
@@ -49,4 +55,39 @@ public class SplitterPluginJigDFS implements Plugable {
                        throw new IllegalArgumentException("CodecID not known: " + codecID);
                }
        }
+       
+       public static void main(String[] args) {
+               Plugable p = new SplitterPluginJigDFS();
+               System.out.println("---------------------------------------------\n" + p.getPluginDescription().getPluginID() + "\t"
+                               + p.getPluginDescription().getPluginName());
+               for (CodecDescription c : p.getCodecDescriptions()) {
+                       System.out.println("\t|---------------------------------------------\n\t|" + c.getCodecID() + "\t"
+                                       + c.getCodecDescriptionText());
+                       Map<String, Integer[]> codecParameterMinMax = c
+                                       .getCodecParameterMinMax();
+                       for (Entry<String, Integer[]> e : codecParameterMinMax
+                                       .entrySet()) {
+                               System.out.println("\t|\t" + e.getKey() + "\tmin:"
+                                               + e.getValue()[0] + "  max:" + e.getValue()[1]);
+                       }
+               }
+               int k = 2;
+               int m = 1;
+               SplitterCodec codecJigDFS = new CodecJigDFS(k,m);
+               String datatxt= "Das soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal reinDas soll hier x mal rein";
+               byte [][] data = new byte [datatxt.getBytes().length][k];
+               for (int i = 0; i < data.length; i++) {
+                       data[i] = datatxt.getBytes();
+               }
+
+               byte[][] result = codecJigDFS.encode(data);
+               for (byte [] part : result){
+                       System.out.println("Part: " + DatatypeConverter.printHexBinary(part));
+               }
+               byte[][] recover = codecJigDFS.decode(result, null);
+               for (byte [] part : recover){
+                       System.out.println("Part: " + DatatypeConverter.printHexBinary(part));
+               }
+               
+       }
 }
\ No newline at end of file
index 5e56e04..e4847bc 100644 (file)
@@ -1 +1,2 @@
 /bin
+/.settings/