Skip to content

Commit

Permalink
RavenDB-3272 started working on multiple replication groups in SQL Re…
Browse files Browse the repository at this point in the history
…plication
  • Loading branch information
ppekrol committed Apr 15, 2015
1 parent 3d5ab78 commit 4501e72
Show file tree
Hide file tree
Showing 5 changed files with 329 additions and 218 deletions.
39 changes: 39 additions & 0 deletions Raven.Database/Bundles/SqlReplication/SqlReplicationClassifier.cs
@@ -0,0 +1,39 @@
// -----------------------------------------------------------------------
// <copyright file="SqlReplicationClassifier.cs" company="Hibernating Rhinos LTD">
// Copyright (c) Hibernating Rhinos LTD. All rights reserved.
// </copyright>
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;

using Raven.Abstractions.Data;
using Raven.Database.Indexing;

namespace Raven.Database.Bundles.SqlReplication
{
internal static class SqlReplicationClassifier
{
private static readonly Dictionary<Etag, List<SqlReplicationConfigWithLastReplicatedEtag>> Empty = new Dictionary<Etag, List<SqlReplicationConfigWithLastReplicatedEtag>>();

public static Dictionary<Etag, List<SqlReplicationConfigWithLastReplicatedEtag>> GroupConfigs(IList<SqlReplicationConfig> configs, Func<SqlReplicationConfig, Etag> getLastEtagFor)
{
if (configs.Count == 0)
return Empty;

var configsByEtag = configs
.Where(x => x.Disabled == false)
.Select(x => new SqlReplicationConfigWithLastReplicatedEtag(x, getLastEtagFor(x)))
.GroupBy(x => x.LastReplicatedEtag, DefaultIndexingClassifier.RoughEtagEqualityAndComparison.Instance)
.OrderByDescending(x => x.Key, DefaultIndexingClassifier.RoughEtagEqualityAndComparison.Instance)
.ToList();

if (configsByEtag.Count == 0)
return Empty;

return configsByEtag
.ToDictionary(x => x.Min(y => y.LastReplicatedEtag), x => x.Select(y => y).ToList());
}
}
}
28 changes: 27 additions & 1 deletion Raven.Database/Bundles/SqlReplication/SqlReplicationConfig.cs
@@ -1,9 +1,35 @@
using System;
using System.Collections.Generic;
using RTools_NTS.Util;

using Raven.Abstractions.Data;

namespace Raven.Database.Bundles.SqlReplication
{
internal class SqlReplicationConfigWithLastReplicatedEtag : SqlReplicationConfig
{
public SqlReplicationConfigWithLastReplicatedEtag(SqlReplicationConfig config, Etag lastReplicatedEtag)
{
LastReplicatedEtag = lastReplicatedEtag;

ConnectionString = config.ConnectionString;
ConnectionStringName = config.ConnectionStringName;
ConnectionStringSettingName = config.ConnectionStringSettingName;
Disabled = config.Disabled;
FactoryName = config.FactoryName;
ForceSqlServerQueryRecompile = config.ForceSqlServerQueryRecompile;
Id = config.Id;
Name = config.Name;
ParameterizeDeletesDisabled = config.ParameterizeDeletesDisabled;
PredefinedConnectionStringSettingName = config.PredefinedConnectionStringSettingName;
QuoteTables = config.QuoteTables;
RavenEntityName = config.RavenEntityName;
Script = config.Script;
SqlReplicationTables = config.SqlReplicationTables;
}

public Etag LastReplicatedEtag { get; private set; }
}

public class SqlReplicationConfig
{
public SqlReplicationConfig()
Expand Down

0 comments on commit 4501e72

Please sign in to comment.