Skip to content

Commit

Permalink
fixes journal version compat issues #5 and #6
Browse files Browse the repository at this point in the history
  • Loading branch information
rofr committed May 12, 2014
1 parent 56e6134 commit 30f070b
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 11 deletions.
4 changes: 2 additions & 2 deletions src/OrigoDB.Core.UnitTests/CommandJournalTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ private static List<JournalEntry> GenerateEntries(ulong numEntries, params ulong
var testEntries = new List<JournalEntry>();
for (ulong i = 1; i <= numEntries; i++)
{
testEntries.Add(new JournalEntry<Command>(i, null));
if (failedCommandIds.Contains(i)) testEntries.Add(new JournalEntry<RollbackMarker>(i, null));
testEntries.Add(new JournalEntry<Command>(i, new ACommand()));
if (failedCommandIds.Contains(i)) testEntries.Add(new JournalEntry<RollbackMarker>(i, new RollbackMarker()));
}
return testEntries;
}
Expand Down
2 changes: 1 addition & 1 deletion src/OrigoDB.Core/Configuration/EngineConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ public static EngineConfiguration Create()
/// </summary>
/// <param name="formatterUsage">The specific formatter</param>
/// <returns>An IFormatter instance provided by the </returns>
public virtual IFormatter CreateFormatter(FormatterUsage formatterUsage = FormatterUsage.Default)
public virtual IFormatter CreateFormatter(FormatterUsage formatterUsage)
{
var formatter = _registry.CanResolve<IFormatter>(formatterUsage.ToString())
? _registry.Resolve<IFormatter>(formatterUsage.ToString())
Expand Down
45 changes: 37 additions & 8 deletions src/OrigoDB.Core/Journaling/JournalEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace OrigoDB.Core
{

[Serializable]
public abstract class JournalEntry
public abstract class JournalEntry : ISerializable
{
public readonly ulong Id;

Expand All @@ -17,6 +17,33 @@ protected JournalEntry(ulong id, DateTime? created = null)
Id = id;
}

public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Id", Id);
info.AddValue("Created", Created);
}

private static bool? _unsignedIdsInJournal = false;

protected JournalEntry(SerializationInfo info, StreamingContext context)
{
Created = info.GetDateTime("Created");
if (!_unsignedIdsInJournal.HasValue)
{
try
{
Id = info.GetUInt64("Id");
_unsignedIdsInJournal = true;
}
catch (Exception)
{
Id = (ulong) info.GetInt64("Id");
_unsignedIdsInJournal = false;
}
}
else if (_unsignedIdsInJournal.Value) Id = info.GetUInt64("Id");
else Id = (ulong) info.GetInt64("Id");
}
}


Expand All @@ -32,14 +59,16 @@ public JournalEntry(ulong id, T item, DateTime? created = null)
Item = item;
}

[OnDeserialized]
private void SetCommandTimestamp(StreamingContext ctx)
protected JournalEntry(SerializationInfo info, StreamingContext context)
:base(info,context)
{
var commandEntry = this as JournalEntry<Command>;
if (commandEntry != null)
{
commandEntry.Item.Timestamp = Created;
}
Item = (T)info.GetValue("<Item>k__BackingField", typeof(T));
}

public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
info.AddValue("<Item>k__BackingField", Item, typeof(T));
}
}

Expand Down
1 change: 1 addition & 0 deletions src/OrigoDB.Core/Storage/StoreExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public static IEnumerable<JournalEntry<Command>> CommittedCommandEntries(Func<IE
{
if (current is JournalEntry<Command>)
{
(current as JournalEntry<Command>).Item.Timestamp = current.Created;
if (previous != null) yield return previous;
previous = (JournalEntry<Command>) current;
}
Expand Down

0 comments on commit 30f070b

Please sign in to comment.