Skip to content
This repository was archived by the owner on Nov 10, 2017. It is now read-only.

Commit 79bceda

Browse files
committed
Branching version for Sitecore CMS 7.2
1 parent 4bcf56f commit 79bceda

20 files changed

Lines changed: 943 additions & 0 deletions

src/Sitecore.Azure.Startup.sln

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 2013
4+
VisualStudioVersion = 12.0.31101.0
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sitecore.Azure.Startup", "Sitecore.Azure.Startup\Sitecore.Azure.Startup.csproj", "{4F5250B1-352C-440C-A605-53560EF85B53}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sitecore", "Sitecore\Sitecore.csproj", "{5409280A-AE87-449F-B4BC-D438C614FCCB}"
9+
EndProject
10+
Project("{CC5FD16D-436D-48AD-A40C-5A424C6E3E79}") = "Sitecore.Azure", "Sitecore.Azure\Sitecore.Azure.ccproj", "{194A8B9D-7DBF-4251-9BFA-28C4DE8FA1C5}"
11+
EndProject
12+
Global
13+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
14+
Debug|Any CPU = Debug|Any CPU
15+
Release|Any CPU = Release|Any CPU
16+
EndGlobalSection
17+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
18+
{4F5250B1-352C-440C-A605-53560EF85B53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19+
{4F5250B1-352C-440C-A605-53560EF85B53}.Debug|Any CPU.Build.0 = Debug|Any CPU
20+
{4F5250B1-352C-440C-A605-53560EF85B53}.Release|Any CPU.ActiveCfg = Release|Any CPU
21+
{4F5250B1-352C-440C-A605-53560EF85B53}.Release|Any CPU.Build.0 = Release|Any CPU
22+
{5409280A-AE87-449F-B4BC-D438C614FCCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{5409280A-AE87-449F-B4BC-D438C614FCCB}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{5409280A-AE87-449F-B4BC-D438C614FCCB}.Release|Any CPU.ActiveCfg = Release|Any CPU
25+
{5409280A-AE87-449F-B4BC-D438C614FCCB}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{194A8B9D-7DBF-4251-9BFA-28C4DE8FA1C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{194A8B9D-7DBF-4251-9BFA-28C4DE8FA1C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{194A8B9D-7DBF-4251-9BFA-28C4DE8FA1C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{194A8B9D-7DBF-4251-9BFA-28C4DE8FA1C5}.Release|Any CPU.Build.0 = Release|Any CPU
30+
EndGlobalSection
31+
GlobalSection(SolutionProperties) = preSolution
32+
HideSolutionNode = FALSE
33+
EndGlobalSection
34+
EndGlobal
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
3+
<sitecore>
4+
<pipelines>
5+
6+
<initialize>
7+
<processor type="Sitecore.Azure.Startup.Pipelines.Loader.RebuildSearchIndex, Sitecore.Azure.Startup" patch:after="processor[@type='Sitecore.Pipelines.Loader.EnsureAnonymousUsers, Sitecore.Kernel']" />
8+
</initialize>
9+
10+
</pipelines>
11+
</sitecore>
12+
</configuration>
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
using System;
2+
using System.Configuration;
3+
using System.Web.Configuration;
4+
using Microsoft.WindowsAzure;
5+
using Sitecore.Diagnostics;
6+
7+
namespace Sitecore.Azure.Startup
8+
{
9+
/// <summary>
10+
/// Provides a way to overwrite configuration settings in Sitecore application for the Azure platform.
11+
/// </summary>
12+
public class ConfigRegistration
13+
{
14+
/// <summary>
15+
/// The connection string list setting.
16+
/// </summary>
17+
private const string ConnectionStringNamesSetting = "ConnectionStringNames";
18+
19+
/// <summary>
20+
/// The array of connection string names that must be overwritten.
21+
/// </summary>
22+
private static readonly string[] ConnectionStringNames;
23+
24+
/// <summary>
25+
/// Initializes the <see cref="ConfigRegistration"/> class.
26+
/// </summary>
27+
static ConfigRegistration()
28+
{
29+
ConnectionStringNames = CloudConfigurationManager.GetSetting(ConnectionStringNamesSetting).Replace(" ", string.Empty).Split(',');
30+
}
31+
32+
/// <summary>
33+
/// Overwrites all matching connection strings from the ServiceConfiguration.cscfg file.
34+
/// </summary>
35+
public static void OverwriteConnectionStrings()
36+
{
37+
var configuration = WebConfigurationManager.OpenWebConfiguration("~");
38+
39+
foreach (var name in ConnectionStringNames)
40+
{
41+
OverwriteConnectionString(name, configuration);
42+
}
43+
44+
configuration.Save();
45+
}
46+
47+
/// <summary>
48+
/// Overwrites a specified connection string.
49+
/// </summary>
50+
/// <param name="name">The name.</param>
51+
public static void OverwriteConnectionString(string name)
52+
{
53+
var configuration = WebConfigurationManager.OpenWebConfiguration("~");
54+
55+
OverwriteConnectionString(name, configuration);
56+
57+
configuration.Save(ConfigurationSaveMode.Minimal);
58+
59+
var message = string.Format("The '{0}' connection string has been overwritten in the configuration file.", name);
60+
Log.Info(message, typeof(ConfigRegistration));
61+
}
62+
63+
/// <summary>
64+
/// Overwrites the connection string.
65+
/// </summary>
66+
/// <param name="name">The name.</param>
67+
/// <param name="configuration">The configuration.</param>
68+
protected static void OverwriteConnectionString(string name, System.Configuration.Configuration configuration)
69+
{
70+
try
71+
{
72+
var connectionString = CloudConfigurationManager.GetSetting(name);
73+
var section = (ConnectionStringsSection) configuration.GetSection("connectionStrings");
74+
var connectionStringSetting = section.ConnectionStrings[name];
75+
76+
if (connectionString != null & connectionStringSetting != null)
77+
{
78+
connectionStringSetting.ConnectionString = connectionString;
79+
}
80+
81+
}
82+
catch (Exception exception)
83+
{
84+
var message = string.Format("Exception occurred during the 'Application_Start' event on overwriting the '{0}' connection strings.", name);
85+
Log.Error(message, exception, typeof(ConfigRegistration));
86+
}
87+
}
88+
}
89+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using Sitecore.Pipelines;
7+
8+
namespace Sitecore.Azure.Startup.Pipelines.Loader
9+
{
10+
/// <summary>
11+
/// The processor that initialize connection string based on the Service Configuration file.
12+
/// </summary>
13+
class InitializeConnectionStrings
14+
{
15+
/// <summary>
16+
/// Processes the specified arguments.
17+
/// </summary>
18+
/// <param name="args">The arguments.</param>
19+
public void Process(PipelineArgs args)
20+
{
21+
ConfigRegistration.OverwriteConnectionStrings();
22+
}
23+
}
24+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System.IO;
2+
using Sitecore.IO;
3+
using Sitecore.Pipelines;
4+
5+
namespace Sitecore.Azure.Startup.Pipelines.Loader
6+
{
7+
/// <summary>
8+
/// The processor that rebuilds search indexes on very first start.
9+
/// </summary>
10+
class RebuildSearchIndex
11+
{
12+
/// <summary>
13+
/// Processes the specified arguments.
14+
/// </summary>
15+
/// <param name="args">The arguments.</param>
16+
public void Process(PipelineArgs args)
17+
{
18+
var filePath = FileUtil.MakePath(FileUtil.MapPath(TempFolder.Folder), "startup.tmp", '\\');
19+
FileInfo info = new FileInfo(filePath);
20+
21+
if (!info.Exists)
22+
{
23+
// Rebuild all search indexes only once when Sitecore is starting.
24+
SearchIndexRebuilder.RebuildAllIndexesAsync();
25+
26+
info.Create().Close();
27+
}
28+
}
29+
}
30+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System.Reflection;
2+
using System.Runtime.CompilerServices;
3+
using System.Runtime.InteropServices;
4+
5+
// General Information about an assembly is controlled through the following
6+
// set of attributes. Change these attribute values to modify the information
7+
// associated with an assembly.
8+
[assembly: AssemblyTitle("Sitecore.Azure.Startup")]
9+
[assembly: AssemblyDescription("Sitecore Azure Startup Module")]
10+
[assembly: AssemblyConfiguration("")]
11+
[assembly: AssemblyCompany("Sitecore Corporation")]
12+
[assembly: AssemblyProduct("Sitecore CMS")]
13+
[assembly: AssemblyCopyright("Copyright © 2015 Sitecore Corporation")]
14+
[assembly: AssemblyTrademark("Sitecore® is a registered trademark of Sitecore Corporation")]
15+
[assembly: AssemblyCulture("")]
16+
17+
[assembly: AssemblyInformationalVersion("7.2 rev. 150614")]
18+
19+
// Setting ComVisible to false makes the types in this assembly not visible
20+
// to COM components. If you need to access a type in this assembly from
21+
// COM, set the ComVisible attribute to true on that type.
22+
[assembly: ComVisible(false)]
23+
24+
// The following GUID is for the ID of the typelib if this project is exposed to COM
25+
[assembly: Guid("a1d2d54b-e534-4b2c-bda3-d6da59e3a6ae")]
26+
27+
// Version information for an assembly consists of the following four values:
28+
//
29+
// Major Version
30+
// Minor Version
31+
// Build Number
32+
// Revision
33+
//
34+
// You can specify all the values or you can default the Build and Revision Numbers
35+
// by using the '*' as shown below:
36+
// [assembly: AssemblyVersion("1.0.*")]
37+
[assembly: AssemblyVersion("7.2.5187.0")]
38+
[assembly: AssemblyFileVersion("7.2.5187.0")]
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using Sitecore.Search;
5+
using Sitecore.ContentSearch;
6+
using Sitecore.Diagnostics;
7+
using Sitecore.SecurityModel;
8+
9+
namespace Sitecore.Azure.Startup
10+
{
11+
/// <summary>
12+
/// Provides a way to rebuild all Search and ContentSearch indexes in Sitecore application for the Azure platform.
13+
/// </summary>
14+
public class SearchIndexRebuilder
15+
{
16+
/// <summary>
17+
/// Rebuilds all Search and ContentSearch asynchronous.
18+
/// </summary>
19+
public static async void RebuildAllIndexesAsync()
20+
{
21+
List<Task> tasksList = new List<Task>();
22+
23+
RebuildSearchIndexesAsync(SearchManager.Indexes, tasksList);
24+
RebuildContentSearchIndexesAsync(ContentSearchManager.Indexes, tasksList);
25+
26+
await Task.WhenAll(tasksList);
27+
}
28+
29+
/// <summary>
30+
/// Rebuilds all Search and ContentSearch indexes.
31+
/// </summary>
32+
public static void RebuildAllIndexes()
33+
{
34+
RebuildSearchIndexes(SearchManager.Indexes);
35+
RebuildContentSearchIndexes(ContentSearchManager.Indexes);
36+
}
37+
38+
#region Private Methods
39+
40+
/// <summary>
41+
/// Rebuilds the Search indexes asynchronous.
42+
/// </summary>
43+
/// <param name="searchIndexList">The search index list.</param>
44+
/// <param name="taskLists">The task lists.</param>
45+
private static void RebuildSearchIndexesAsync(IEnumerable<Index> searchIndexList, IList<Task> taskLists)
46+
{
47+
foreach (var searchIndex in searchIndexList)
48+
{
49+
try
50+
{
51+
var index = searchIndex;
52+
53+
Task rebuildIndexTask = Task.Run(() =>
54+
{
55+
using (new SecurityDisabler())
56+
{
57+
index.Rebuild();
58+
}
59+
});
60+
61+
taskLists.Add(rebuildIndexTask);
62+
}
63+
catch (Exception exception)
64+
{
65+
var message = string.Format("Exception occurred during rebuilding the '{0}' Search index.", searchIndex.Name);
66+
Log.Error(message, exception, typeof(SearchIndexRebuilder));
67+
}
68+
}
69+
}
70+
71+
/// <summary>
72+
/// Rebuilds the ContentSearch indexes asynchronous.
73+
/// </summary>
74+
/// <param name="searchIndexList">The search index list.</param>
75+
/// <param name="taskLists">The task lists.</param>
76+
private static void RebuildContentSearchIndexesAsync(IEnumerable<ISearchIndex> searchIndexList, IList<Task> taskLists)
77+
{
78+
foreach (var searchIndex in searchIndexList)
79+
{
80+
try
81+
{
82+
var index = searchIndex;
83+
84+
Task rebuildIndexTask = Task.Run(() =>
85+
{
86+
using (new SecurityDisabler())
87+
{
88+
index.Rebuild();
89+
}
90+
});
91+
92+
taskLists.Add(rebuildIndexTask);
93+
}
94+
catch (Exception exception)
95+
{
96+
var message = string.Format("Exception occurred during rebuilding the '{0}' ContentSearch index.", searchIndex.Name);
97+
Log.Error(message, exception, typeof(SearchIndexRebuilder));
98+
}
99+
}
100+
}
101+
102+
/// <summary>
103+
/// Rebuilds the Search indexes.
104+
/// </summary>
105+
/// <param name="indexList">The index list.</param>
106+
private static void RebuildSearchIndexes(IEnumerable<Index> indexList)
107+
{
108+
foreach (var index in indexList)
109+
{
110+
using (new SecurityDisabler())
111+
{
112+
try
113+
{
114+
index.Rebuild();
115+
}
116+
catch (Exception exception)
117+
{
118+
var message = string.Format("Exception occurred during rebuilding the '{0}' Search index.", index.Name);
119+
Log.Error(message, exception, typeof(SearchIndexRebuilder));
120+
}
121+
}
122+
}
123+
}
124+
125+
/// <summary>
126+
/// Rebuilds the ContentSearch indexes.
127+
/// </summary>
128+
/// <param name="indexList">The index list.</param>
129+
private static void RebuildContentSearchIndexes(IEnumerable<ISearchIndex> indexList)
130+
{
131+
foreach (var index in indexList)
132+
{
133+
using (new SecurityDisabler())
134+
{
135+
try
136+
{
137+
index.Rebuild();
138+
}
139+
catch (Exception exception)
140+
{
141+
var message = string.Format("Exception occurred during rebuilding the '{0}' ContentSearch index.", index.Name);
142+
Log.Error(message, exception, typeof(SearchIndexRebuilder));
143+
}
144+
}
145+
}
146+
}
147+
148+
#endregion
149+
}
150+
}

0 commit comments

Comments
 (0)