Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/15/17 13:26:49 (7 years ago)
Author:
jkarder
Message:

#2520: worked on new persistence

  • changed message definitions
  • updated transformers
  • worked on conversions
  • cleaned up
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PersistenceReintegration/HeuristicLab.Tests/HeuristicLab.Persistence-3.3/UseCasesPersistenceNew.cs

    r15509 r15529  
    408408    }
    409409
    410     public string Profile(Func<object> GenerateDataFunc) {
     410    public string Profile(Func<object> GenerateDataFunc, string filename = null) {
    411411      int nrOfRepetitions = 30;
    412412      StringBuilder report = new StringBuilder();
     
    417417      }
    418418
    419       report.Append("Performance Report for " + GenerateDataFunc.Method.Name + ": " + Environment.NewLine);
     419      //report.Append("Performance Report for " + GenerateDataFunc.Method.Name + ": " + Environment.NewLine);
    420420      report.Append(Environment.NewLine);
    421       report.AppendFormat("Avg. old vs. new time for serializing a file; {0};{1};{2}",
     421      report.AppendFormat("Avg. old vs. new time for serializing a file; {3};{0};{1};{2}",
    422422              dataList.Select(x => x.OldSerializingTime).Average(),
    423423              dataList.Select(x => x.NewSerializingTime).Average(),
    424424              dataList.Select(x => x.OldSerializingTime.TotalMilliseconds).Average() / dataList.Select(x => x.NewSerializingTime.TotalMilliseconds).Average()
    425               );
     425              , filename);
    426426      report.Append(Environment.NewLine);
    427       report.AppendFormat("Avg. old vs. new time for deserializing a file; {0};{1};{2}",
     427      report.AppendFormat("Avg. old vs. new time for deserializing a file; {3};{0};{1};{2}",
    428428              dataList.Select(x => x.OldDeserializingTime).Average(),
    429429              dataList.Select(x => x.NewDeserializingTime).Average(),
    430430              dataList.Select(x => x.OldDeserializingTime.TotalMilliseconds).Average() / dataList.Select(x => x.NewDeserializingTime.TotalMilliseconds).Average()
    431               );
     431              , filename);
    432432      report.Append(Environment.NewLine);
    433       report.AppendFormat("Avg. old vs. new file size (in bytes); {0};{1};{2}",
     433      report.AppendFormat("Avg. old vs. new file size (in bytes); {3};{0};{1};{2}",
    434434              dataList.Select(x => x.OldFileSize).Average(),
    435435              dataList.Select(x => x.NewFileSize).Average(),
    436436              dataList.Select(x => x.OldFileSize).Average() / dataList.Select(x => x.NewFileSize).Average()
    437               );
     437              , filename);
    438438      report.Append(Environment.NewLine);
    439       report.AppendFormat("Avg. old vs. new memory consumption for serializing a file (in bytes); {0};{1};{2}",
     439      report.AppendFormat("Avg. old vs. new memory consumption for serializing a file (in bytes); {3};{0};{1};{2}",
    440440              dataList.Select(x => x.OldSerializingMemoryConsumed).Average(),
    441441              dataList.Select(x => x.NewSerializingMemoryConsumed).Average(),
    442442              dataList.Select(x => x.OldSerializingMemoryConsumed).Average() / dataList.Select(x => x.NewSerializingMemoryConsumed).Average()
    443               );
     443              , filename);
    444444      report.Append(Environment.NewLine);
    445       report.AppendFormat("Avg. old vs. new memory consumption for deserializing a file (in bytes); {0};{1};{2}",
     445      report.AppendFormat("Avg. old vs. new memory consumption for deserializing a file (in bytes); {3};{0};{1};{2}",
    446446              dataList.Select(x => x.OldDeserializingMemoryConsumed).Average(),
    447447              dataList.Select(x => x.NewDeserializingMemoryConsumed).Average(),
    448448              dataList.Select(x => x.OldDeserializingMemoryConsumed).Average() / dataList.Select(x => x.NewDeserializingMemoryConsumed).Average()
    449               );
     449              , filename);
    450450      report.Append(Environment.NewLine);
    451451
     
    21602160
    21612161
    2162     [StorableType("B72C58C8-3321-4706-AA94-578F57337070", 2)]
     2162    [StorableType("B72C58C8-3321-4706-AA94-578F57337070")]
    21632163    private class NewBaseType {
    21642164      [Storable]
    21652165      public DoubleValue[] items;
    21662166    }
    2167     [StorableType("00000000-0000-0000-0000-BADCAFFEE000", 2)] // for testing (version 2)
     2167    [StorableType("00000000-0000-0000-0000-BADCAFFEE001", 2)] // for testing (version 2)
    21682168    private class V2 : NewBaseType {
    21692169      [Storable]
     
    21892189    }
    21902190
    2191     [StorableType("00000000-0000-0000-0000-BADCAFFEE200", 3)] // for testing (version 3)
     2191    [StorableType("00000000-0000-0000-0000-BADCAFFEE002", 3)] // for testing (version 3)
    21922192    private class V3 : NewBaseType {
    21932193      [Storable]
     
    22152215      private static Dictionary<string, object> ConvertV1(Dictionary<string, object> values) {
    22162216        var newValues = new Dictionary<string, object>();
    2217         var items = (ItemCollection<IItem>)values["OldBaseType.items"];
    2218         newValues["NewBaseType.items"] = items.Select(iv => new DoubleValue((double)(((dynamic)iv).Value))).ToArray();
    2219         newValues["V2.a"] = ((IntValue)values["V1.a"]).Value;
    2220         newValues["V2.val"] = ((ItemList<IntValue>)values["V1.vals"]).Select(iv => iv.Value).ToArray();
    2221 
    2222         newValues["V2.mySelf"] = values["V1.mySelf"]; // myself type will be mapped correctly
    2223 
    2224         var tup = (Tuple<int, int>)values["V1.tup"];
     2217        var items = (ItemCollection<IItem>)values["F9F51075-490C-48E3-BF64-14514A210149.items"];
     2218        newValues["B72C58C8-3321-4706-AA94-578F57337070.items"] = items.Select(iv => new DoubleValue((double)(((dynamic)iv).Value))).ToArray();
     2219        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.a"] = ((IntValue)values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.a"]).Value;
     2220        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.val"] = ((ItemList<IntValue>)values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.vals"]).Select(iv => iv.Value).ToArray();
     2221
     2222        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.mySelf"] = values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.mySelf"]; // myself type will be mapped correctly
     2223
     2224        var tup = (Tuple<int, int>)values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.tup"];
    22252225        if (tup != null) {
    2226           newValues["V2.TupItem1"] = tup.Item1;
    2227           newValues["V2.TupItem2"] = tup.Item2;
     2226          newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.TupItem1"] = tup.Item1;
     2227          newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.TupItem2"] = tup.Item2;
    22282228        }
    22292229
    2230         newValues["V2.coords"] = new Point((int)values["V1.x"], (int)values["V1.y"]);
     2230        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.coords"] = new Point((int)values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.x"], (int)values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.y"]);
    22312231
    22322232        return newValues;
     
    22362236      private static Dictionary<string, object> ConvertV2(Dictionary<string, object> values) {
    22372237        var newValues = new Dictionary<string, object>();
    2238         newValues["NewBaseType.items"] = values["NewBaseType.items"];
    2239         newValues["V3.a"] = values["V2.a"];
    2240         newValues["V3.val"] = values["V2.val"];
    2241         newValues["V3.mySelf"] = values["V2.mySelf"];
    2242 
    2243         newValues["V3.tup"] = Tuple.Create((int)values["V2.TupItem1"], (int)values["V2.TupItem2"]);
    2244         newValues["V3.coords"] = values["V2.coords"];
     2238        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.a"] = values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.a"];
     2239        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.val"] = values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.val"];
     2240        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.mySelf"] = values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.mySelf"];
     2241
     2242        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.tup"] = Tuple.Create((int)values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.TupItem1"], (int)values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.TupItem2"]);
     2243        newValues["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.coords"] = values["D211A828-6440-4E72-A8C7-AA4F9B4FFA75.coords"];
    22452244
    22462245        return newValues;
     
    22702269      Mapper.StaticCache.DeregisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(V2)).Guid);
    22712270      Mapper.StaticCache.DeregisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(V3)).Guid);
    2272 
    22732271      Mapper.StaticCache.RegisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(V1)).Guid, typeof(V3));
    2274       var pi = typeof(StorableTypeAttribute).GetProperty("Guid");
    2275       pi.SetValue(
    2276         Mapper.StaticCache.GetTypeInfo(typeof(V3)).StorableTypeAttribute,
    2277         StorableTypeAttribute.GetStorableTypeAttribute(typeof(V1)).Guid,
    2278         null);
     2272
     2273      var typeInfosField = typeof(StaticCache).GetField("typeInfos", BindingFlags.NonPublic | BindingFlags.Instance);
     2274      var typeInfos = (Dictionary<Type, Persistence.TypeInfo>)typeInfosField.GetValue(Mapper.StaticCache);
     2275
     2276      var guidPI = typeof(StorableTypeAttribute).GetProperty("Guid");
     2277      var convPI = typeof(Persistence.TypeInfo).GetProperty("ConversionMethods");
     2278
     2279      var oldBInfo = typeInfos[typeof(V1)];
     2280      var newBInfo = Mapper.StaticCache.GetTypeInfo(typeof(V3));
     2281      guidPI.SetValue(newBInfo.StorableTypeAttribute, oldBInfo.StorableTypeAttribute.Guid);
     2282      //convPI.SetValue(newBInfo, oldBInfo.ConversionMethods);
     2283      typeInfos.Remove(typeof(V1));
    22792284
    22802285      object o = serializer.Deserialize(tempFile);
     
    23482353          serializer.Serialize(original, fileName + ".proto");
    23492354          // var newVersion = serializer.Deserialize(fileName + ".proto");
    2350           Console.WriteLine("File: " + fileName);
    2351           var p = Profile(() => original);
     2355          //Console.WriteLine("File: " + fileName);
     2356          var p = Profile(() => original, Path.GetFileName(fileName));
    23522357          Console.WriteLine(p);
    23532358        }
    23542359      }
    23552360    }
     2361
     2362    [StorableType("3B48A44F-93E2-4ECC-A9B9-56E425EF96F8")]
     2363    private class ConversionA {
     2364      [Storable]
     2365      public int f;
     2366    }
     2367
     2368    [StorableType("00000000-0000-0000-0000-000000000002", 2)]
     2369    private class ConversionANew {
     2370      [Storable]
     2371      public int g;
     2372    }
     2373
     2374    [StorableType("7CBF2251-CF9F-4D9E-AA7B-C65495AE078F")]
     2375    private class ConversionB : ConversionA {
     2376      [Storable]
     2377      public int f;
     2378      public int BaseF { get { return base.f; } }
     2379
     2380      public ConversionB() {
     2381
     2382      }
     2383
     2384      public ConversionB(int myF, int baseF) {
     2385        this.f = myF;
     2386        base.f = baseF;
     2387      }
     2388    }
     2389
     2390    [StorableType("00000000-0000-0000-0000-000000000001", 2)]
     2391    private class ConversionBNew : ConversionANew {
     2392      [Storable]
     2393      public int g;
     2394
     2395      public int BaseG { get { return base.g; } }
     2396    }
     2397
     2398    private static class NewConversions {
     2399      [StorableConversion("7CBF2251-CF9F-4D9E-AA7B-C65495AE078F", 1)]
     2400      private static Dictionary<string, object> ConvertB(Dictionary<string, object> values) {
     2401        var newValues = new Dictionary<string, object>();
     2402        newValues["7CBF2251-CF9F-4D9E-AA7B-C65495AE078F.g"] = values["7CBF2251-CF9F-4D9E-AA7B-C65495AE078F.f"];
     2403        return newValues;
     2404      }
     2405
     2406      [StorableConversion("3B48A44F-93E2-4ECC-A9B9-56E425EF96F8", 1)]
     2407      private static Dictionary<string, object> ConvertA(Dictionary<string, object> values) {
     2408        var newValues = new Dictionary<string, object>();
     2409        newValues["3B48A44F-93E2-4ECC-A9B9-56E425EF96F8.g"] = values["3B48A44F-93E2-4ECC-A9B9-56E425EF96F8.f"];
     2410        return newValues;
     2411      }
     2412    }
     2413
     2414    [TestMethod]
     2415    [TestCategory("Persistence4")]
     2416    [TestProperty("Time", "short")]
     2417    public void TestConversionCase1() {
     2418      var test = new Func<ConversionB>(() => {
     2419        return new ConversionB(1, 2);
     2420      });
     2421
     2422      ProtoBufSerializer serializer = new ProtoBufSerializer();
     2423      var old = test();
     2424      serializer.Serialize(old, tempFile);
     2425      Mapper.StaticCache.DeregisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(ConversionB)).Guid);
     2426      Mapper.StaticCache.DeregisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(ConversionBNew)).Guid);
     2427      Mapper.StaticCache.DeregisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(ConversionA)).Guid);
     2428      Mapper.StaticCache.DeregisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(ConversionANew)).Guid);
     2429      Mapper.StaticCache.RegisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(ConversionB)).Guid, typeof(ConversionBNew));
     2430      Mapper.StaticCache.RegisterType(StorableTypeAttribute.GetStorableTypeAttribute(typeof(ConversionA)).Guid, typeof(ConversionANew));
     2431
     2432      var typeInfosField = typeof(StaticCache).GetField("typeInfos", BindingFlags.NonPublic | BindingFlags.Instance);
     2433      var typeInfos = (Dictionary<Type, Persistence.TypeInfo>)typeInfosField.GetValue(Mapper.StaticCache);
     2434
     2435      var guidPI = typeof(StorableTypeAttribute).GetProperty("Guid");
     2436      var convPI = typeof(Persistence.TypeInfo).GetProperty("ConversionMethods");
     2437
     2438      var oldAInfo = typeInfos[typeof(ConversionA)];
     2439      var newAInfo = Mapper.StaticCache.GetTypeInfo(typeof(ConversionANew));
     2440      guidPI.SetValue(newAInfo.StorableTypeAttribute, oldAInfo.StorableTypeAttribute.Guid);
     2441      //convPI.SetValue(newAInfo, oldAInfo.ConversionMethods);
     2442      typeInfos.Remove(typeof(ConversionA));
     2443
     2444      var oldBInfo = typeInfos[typeof(ConversionB)];
     2445      var newBInfo = Mapper.StaticCache.GetTypeInfo(typeof(ConversionBNew));
     2446      guidPI.SetValue(newBInfo.StorableTypeAttribute, oldBInfo.StorableTypeAttribute.Guid);
     2447      //convPI.SetValue(newBInfo, oldBInfo.ConversionMethods);
     2448      typeInfos.Remove(typeof(ConversionB));
     2449
     2450      object o = serializer.Deserialize(tempFile);
     2451      var restored = (ConversionBNew)o;
     2452      Assert.AreEqual(restored.g, old.f);
     2453      Assert.AreEqual(restored.BaseG, old.BaseF);
     2454    }
    23562455  }
    23572456}
Note: See TracChangeset for help on using the changeset viewer.