Commit e65579a4 authored by Nick Craver's avatar Nick Craver

Folder moves + updates to handle it

This moves to our normal directory layout, and removes the unused ConnectionWatcher.

Note 1: There's an apparently unused StackExchange.Redis.Modules I'm not sure about....going to let Marc nuke it if sure.

Note 2: the sentinel redis configs which are usually redis ignored may have absolute paths in them that need a quick update to get going again in a killall-> change config -> ./start-all.sh

cc @mgravell on above ^
parent 3cc1d6b5
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{6756F911-BD09-4226-B597-67871DEB8ED5}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ConnectionWatcher</RootNamespace>
<AssemblyName>ConnectionWatcher</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Verbose\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Verbose|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Verbose\</OutputPath>
<DefineConstants>TRACE;DEBUG;VERBOSE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Log Output|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Log Output\</OutputPath>
<DefineConstants>TRACE;DEBUG;LOGOUTPUT</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\StackExchange.Redis_Net45\StackExchange.Redis_Net45.csproj">
<Project>{7cec07f2-8c03-4c42-b048-738b215824c1}</Project>
<Name>StackExchange.Redis_Net45</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
\ No newline at end of file
namespace ConnectionWatcher
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.Label label1;
System.Windows.Forms.Label label2;
System.Windows.Forms.Label label3;
System.Windows.Forms.Label label4;
System.Windows.Forms.Label label5;
this.connect = new System.Windows.Forms.Button();
this.console = new System.Windows.Forms.TextBox();
this.endpoints = new System.Windows.Forms.ListBox();
this.breakSocket = new System.Windows.Forms.Button();
this.demandMaster = new System.Windows.Forms.Label();
this.preferMaster = new System.Windows.Forms.Label();
this.preferSlave = new System.Windows.Forms.Label();
this.demandSlave = new System.Windows.Forms.Label();
this.ticker = new System.Windows.Forms.Timer(this.components);
this.label6 = new System.Windows.Forms.Label();
this.redisKey = new System.Windows.Forms.Label();
this.allowConnect = new System.Windows.Forms.CheckBox();
this.connectionString = new System.Windows.Forms.ComboBox();
this.clearLog = new System.Windows.Forms.Button();
this.deslave = new System.Windows.Forms.Button();
this.shutdown = new System.Windows.Forms.Button();
this.deify = new System.Windows.Forms.Button();
this.export = new System.Windows.Forms.Button();
this.reconfigure = new System.Windows.Forms.Button();
this.enableLog = new System.Windows.Forms.CheckBox();
this.disconnect = new System.Windows.Forms.Button();
this.bulkOps = new System.Windows.Forms.GroupBox();
this.sameKey = new System.Windows.Forms.CheckBox();
this.bulkPerThread = new System.Windows.Forms.NumericUpDown();
this.bulkFF = new System.Windows.Forms.Button();
this.bulkThreads = new System.Windows.Forms.NumericUpDown();
this.bulkBatch = new System.Windows.Forms.Button();
this.bulkSync = new System.Windows.Forms.Button();
this.bulkAsync = new System.Windows.Forms.Button();
this.flush = new System.Windows.Forms.Button();
this.clearStormLog = new System.Windows.Forms.Button();
label1 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
label3 = new System.Windows.Forms.Label();
label4 = new System.Windows.Forms.Label();
label5 = new System.Windows.Forms.Label();
this.bulkOps.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.bulkPerThread)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bulkThreads)).BeginInit();
this.SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.Location = new System.Drawing.Point(12, 18);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(91, 13);
label1.TabIndex = 2;
label1.Text = "Connection String";
//
// label2
//
label2.AutoSize = true;
label2.Location = new System.Drawing.Point(333, 48);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(85, 13);
label2.TabIndex = 6;
label2.Text = "Demand Master:";
//
// label3
//
label3.AutoSize = true;
label3.Location = new System.Drawing.Point(333, 76);
label3.Name = "label3";
label3.Size = new System.Drawing.Size(73, 13);
label3.TabIndex = 7;
label3.Text = "Prefer Master:";
//
// label4
//
label4.AutoSize = true;
label4.Location = new System.Drawing.Point(333, 104);
label4.Name = "label4";
label4.Size = new System.Drawing.Size(68, 13);
label4.TabIndex = 8;
label4.Text = "Prefer Slave:";
//
// label5
//
label5.AutoSize = true;
label5.Location = new System.Drawing.Point(333, 131);
label5.Name = "label5";
label5.Size = new System.Drawing.Size(80, 13);
label5.TabIndex = 9;
label5.Text = "Demand Slave:";
//
// connect
//
this.connect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.connect.Location = new System.Drawing.Point(808, 13);
this.connect.Name = "connect";
this.connect.Size = new System.Drawing.Size(75, 23);
this.connect.TabIndex = 1;
this.connect.Text = "Connect";
this.connect.UseVisualStyleBackColor = true;
this.connect.Click += new System.EventHandler(this.connect_Clicked);
//
// console
//
this.console.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.console.Location = new System.Drawing.Point(12, 261);
this.console.Multiline = true;
this.console.Name = "console";
this.console.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.console.Size = new System.Drawing.Size(872, 312);
this.console.TabIndex = 3;
//
// endpoints
//
this.endpoints.Enabled = false;
this.endpoints.FormattingEnabled = true;
this.endpoints.Location = new System.Drawing.Point(15, 39);
this.endpoints.Name = "endpoints";
this.endpoints.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
this.endpoints.Size = new System.Drawing.Size(312, 160);
this.endpoints.TabIndex = 4;
//
// breakSocket
//
this.breakSocket.Enabled = false;
this.breakSocket.Location = new System.Drawing.Point(15, 205);
this.breakSocket.Name = "breakSocket";
this.breakSocket.Size = new System.Drawing.Size(120, 23);
this.breakSocket.TabIndex = 5;
this.breakSocket.Text = "Break Socket";
this.breakSocket.UseVisualStyleBackColor = true;
this.breakSocket.Click += new System.EventHandler(this.breakSocket_Click);
//
// demandMaster
//
this.demandMaster.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.demandMaster.Location = new System.Drawing.Point(424, 48);
this.demandMaster.Name = "demandMaster";
this.demandMaster.Size = new System.Drawing.Size(348, 23);
this.demandMaster.TabIndex = 10;
this.demandMaster.Text = "(timings etc)";
//
// preferMaster
//
this.preferMaster.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.preferMaster.Location = new System.Drawing.Point(424, 76);
this.preferMaster.Name = "preferMaster";
this.preferMaster.Size = new System.Drawing.Size(348, 23);
this.preferMaster.TabIndex = 11;
this.preferMaster.Text = "(timings etc)";
//
// preferSlave
//
this.preferSlave.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.preferSlave.Location = new System.Drawing.Point(424, 104);
this.preferSlave.Name = "preferSlave";
this.preferSlave.Size = new System.Drawing.Size(348, 23);
this.preferSlave.TabIndex = 12;
this.preferSlave.Text = "(timings etc)";
//
// demandSlave
//
this.demandSlave.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.demandSlave.Location = new System.Drawing.Point(424, 131);
this.demandSlave.Name = "demandSlave";
this.demandSlave.Size = new System.Drawing.Size(348, 23);
this.demandSlave.TabIndex = 13;
this.demandSlave.Text = "(timings etc)";
//
// ticker
//
this.ticker.Interval = 1000;
this.ticker.Tick += new System.EventHandler(this.ticker_Tick);
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(333, 158);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(58, 13);
this.label6.TabIndex = 14;
this.label6.Text = "Redis Key:";
//
// redisKey
//
this.redisKey.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.redisKey.Location = new System.Drawing.Point(424, 158);
this.redisKey.Name = "redisKey";
this.redisKey.Size = new System.Drawing.Size(348, 23);
this.redisKey.TabIndex = 15;
this.redisKey.Text = "(timings etc)";
//
// allowConnect
//
this.allowConnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.allowConnect.AutoSize = true;
this.allowConnect.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.allowConnect.Checked = true;
this.allowConnect.CheckState = System.Windows.Forms.CheckState.Checked;
this.allowConnect.Enabled = false;
this.allowConnect.Location = new System.Drawing.Point(525, 209);
this.allowConnect.Name = "allowConnect";
this.allowConnect.Size = new System.Drawing.Size(107, 17);
this.allowConnect.TabIndex = 16;
this.allowConnect.Text = "Allow Reconnect";
this.allowConnect.UseVisualStyleBackColor = true;
this.allowConnect.CheckedChanged += new System.EventHandler(this.allowConnect_CheckedChanged);
//
// connectionString
//
this.connectionString.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.connectionString.FormattingEnabled = true;
this.connectionString.Items.AddRange(new object[] {
"cluster:7000,cluster:7001,cluster:7002,cluster:7003,cluster:7004,cluster:7005,res" +
"olveDns=true",
".,.:6380,resolveDns=true",
"sslredis:6379,syncTimeout=10000",
"sslredis:6380,sslHost=anyone,syncTimeout=10000"});
this.connectionString.Location = new System.Drawing.Point(109, 15);
this.connectionString.Name = "connectionString";
this.connectionString.Size = new System.Drawing.Size(612, 21);
this.connectionString.TabIndex = 17;
this.connectionString.Text = "localhost,localhost:6380";
//
// clearLog
//
this.clearLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.clearLog.Location = new System.Drawing.Point(764, 205);
this.clearLog.Name = "clearLog";
this.clearLog.Size = new System.Drawing.Size(120, 23);
this.clearLog.TabIndex = 18;
this.clearLog.Text = "Clear Log";
this.clearLog.UseVisualStyleBackColor = true;
this.clearLog.Click += new System.EventHandler(this.clearLog_Click);
//
// deslave
//
this.deslave.Enabled = false;
this.deslave.Location = new System.Drawing.Point(141, 205);
this.deslave.Name = "deslave";
this.deslave.Size = new System.Drawing.Size(120, 23);
this.deslave.TabIndex = 19;
this.deslave.Text = "Deslave";
this.deslave.UseVisualStyleBackColor = true;
this.deslave.Click += new System.EventHandler(this.deslave_Click);
//
// shutdown
//
this.shutdown.Enabled = false;
this.shutdown.Location = new System.Drawing.Point(15, 234);
this.shutdown.Name = "shutdown";
this.shutdown.Size = new System.Drawing.Size(120, 23);
this.shutdown.TabIndex = 20;
this.shutdown.Text = "Shutdown";
this.shutdown.UseVisualStyleBackColor = true;
this.shutdown.Click += new System.EventHandler(this.shutdown_Click);
//
// deify
//
this.deify.Enabled = false;
this.deify.Location = new System.Drawing.Point(141, 234);
this.deify.Name = "deify";
this.deify.Size = new System.Drawing.Size(120, 23);
this.deify.TabIndex = 21;
this.deify.Text = "DEIFY!";
this.deify.UseVisualStyleBackColor = true;
this.deify.Click += new System.EventHandler(this.deify_Click);
//
// export
//
this.export.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.export.Enabled = false;
this.export.Location = new System.Drawing.Point(638, 205);
this.export.Name = "export";
this.export.Size = new System.Drawing.Size(120, 23);
this.export.TabIndex = 22;
this.export.Text = "Export";
this.export.UseVisualStyleBackColor = true;
this.export.Click += new System.EventHandler(this.export_Click);
//
// reconfigure
//
this.reconfigure.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.reconfigure.Enabled = false;
this.reconfigure.Location = new System.Drawing.Point(638, 234);
this.reconfigure.Name = "reconfigure";
this.reconfigure.Size = new System.Drawing.Size(120, 23);
this.reconfigure.TabIndex = 23;
this.reconfigure.Text = "Reconfigure";
this.reconfigure.UseVisualStyleBackColor = true;
this.reconfigure.Click += new System.EventHandler(this.reconfigure_Click);
//
// enableLog
//
this.enableLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.enableLog.AutoSize = true;
this.enableLog.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
this.enableLog.Checked = true;
this.enableLog.CheckState = System.Windows.Forms.CheckState.Checked;
this.enableLog.Location = new System.Drawing.Point(552, 238);
this.enableLog.Name = "enableLog";
this.enableLog.Size = new System.Drawing.Size(80, 17);
this.enableLog.TabIndex = 24;
this.enableLog.Text = "Enable Log";
this.enableLog.UseVisualStyleBackColor = true;
//
// disconnect
//
this.disconnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.disconnect.Enabled = false;
this.disconnect.Location = new System.Drawing.Point(727, 13);
this.disconnect.Name = "disconnect";
this.disconnect.Size = new System.Drawing.Size(75, 23);
this.disconnect.TabIndex = 25;
this.disconnect.Text = "Disconnect";
this.disconnect.UseVisualStyleBackColor = true;
this.disconnect.Click += new System.EventHandler(this.disconnect_Click);
//
// bulkOps
//
this.bulkOps.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bulkOps.Controls.Add(this.sameKey);
this.bulkOps.Controls.Add(this.bulkPerThread);
this.bulkOps.Controls.Add(this.bulkFF);
this.bulkOps.Controls.Add(this.bulkThreads);
this.bulkOps.Controls.Add(this.bulkBatch);
this.bulkOps.Controls.Add(this.bulkSync);
this.bulkOps.Controls.Add(this.bulkAsync);
this.bulkOps.Enabled = false;
this.bulkOps.Location = new System.Drawing.Point(778, 48);
this.bulkOps.Name = "bulkOps";
this.bulkOps.Size = new System.Drawing.Size(105, 151);
this.bulkOps.TabIndex = 31;
this.bulkOps.TabStop = false;
this.bulkOps.Text = "Bulk Ops";
//
// sameKey
//
this.sameKey.AutoSize = true;
this.sameKey.Checked = true;
this.sameKey.CheckState = System.Windows.Forms.CheckState.Checked;
this.sameKey.Location = new System.Drawing.Point(6, 109);
this.sameKey.Name = "sameKey";
this.sameKey.Size = new System.Drawing.Size(74, 17);
this.sameKey.TabIndex = 35;
this.sameKey.Text = "Same Key";
this.sameKey.UseVisualStyleBackColor = true;
//
// bulkPerThread
//
this.bulkPerThread.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bulkPerThread.Location = new System.Drawing.Point(52, 26);
this.bulkPerThread.Maximum = new decimal(new int[] {
9999,
0,
0,
0});
this.bulkPerThread.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.bulkPerThread.Name = "bulkPerThread";
this.bulkPerThread.Size = new System.Drawing.Size(47, 20);
this.bulkPerThread.TabIndex = 34;
this.bulkPerThread.Value = new decimal(new int[] {
1000,
0,
0,
0});
//
// bulkFF
//
this.bulkFF.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bulkFF.Location = new System.Drawing.Point(6, 81);
this.bulkFF.Name = "bulkFF";
this.bulkFF.Size = new System.Drawing.Size(47, 23);
this.bulkFF.TabIndex = 33;
this.bulkFF.Text = "F+F";
this.bulkFF.UseVisualStyleBackColor = true;
this.bulkFF.Click += new System.EventHandler(this.bulkFF_Click);
//
// bulkThreads
//
this.bulkThreads.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bulkThreads.Location = new System.Drawing.Point(6, 26);
this.bulkThreads.Maximum = new decimal(new int[] {
50,
0,
0,
0});
this.bulkThreads.Minimum = new decimal(new int[] {
1,
0,
0,
0});
this.bulkThreads.Name = "bulkThreads";
this.bulkThreads.Size = new System.Drawing.Size(47, 20);
this.bulkThreads.TabIndex = 32;
this.bulkThreads.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// bulkBatch
//
this.bulkBatch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bulkBatch.Location = new System.Drawing.Point(52, 81);
this.bulkBatch.Name = "bulkBatch";
this.bulkBatch.Size = new System.Drawing.Size(47, 23);
this.bulkBatch.TabIndex = 31;
this.bulkBatch.Text = "Batch";
this.bulkBatch.UseVisualStyleBackColor = true;
this.bulkBatch.Click += new System.EventHandler(this.bulkBatch_Click);
//
// bulkSync
//
this.bulkSync.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bulkSync.Location = new System.Drawing.Point(52, 52);
this.bulkSync.Name = "bulkSync";
this.bulkSync.Size = new System.Drawing.Size(47, 23);
this.bulkSync.TabIndex = 30;
this.bulkSync.Text = "Sync";
this.bulkSync.UseVisualStyleBackColor = true;
this.bulkSync.Click += new System.EventHandler(this.bulkSync_Click);
//
// bulkAsync
//
this.bulkAsync.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.bulkAsync.Location = new System.Drawing.Point(6, 52);
this.bulkAsync.Name = "bulkAsync";
this.bulkAsync.Size = new System.Drawing.Size(47, 23);
this.bulkAsync.TabIndex = 29;
this.bulkAsync.Text = "Async";
this.bulkAsync.UseVisualStyleBackColor = true;
this.bulkAsync.Click += new System.EventHandler(this.bulkAsync_Click);
//
// flush
//
this.flush.Enabled = false;
this.flush.Location = new System.Drawing.Point(267, 205);
this.flush.Name = "flush";
this.flush.Size = new System.Drawing.Size(120, 23);
this.flush.TabIndex = 32;
this.flush.Text = "Flush";
this.flush.UseVisualStyleBackColor = true;
this.flush.Click += new System.EventHandler(this.flush_Click);
//
// clearStormLog
//
this.clearStormLog.Enabled = false;
this.clearStormLog.Location = new System.Drawing.Point(267, 234);
this.clearStormLog.Name = "clearStormLog";
this.clearStormLog.Size = new System.Drawing.Size(120, 23);
this.clearStormLog.TabIndex = 33;
this.clearStormLog.Text = "Clear Storm Log";
this.clearStormLog.UseVisualStyleBackColor = true;
this.clearStormLog.Click += new System.EventHandler(this.clearStormLog_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(896, 585);
this.Controls.Add(this.clearStormLog);
this.Controls.Add(this.flush);
this.Controls.Add(this.bulkOps);
this.Controls.Add(this.disconnect);
this.Controls.Add(this.enableLog);
this.Controls.Add(this.reconfigure);
this.Controls.Add(this.export);
this.Controls.Add(this.deify);
this.Controls.Add(this.shutdown);
this.Controls.Add(this.deslave);
this.Controls.Add(this.clearLog);
this.Controls.Add(this.connectionString);
this.Controls.Add(this.allowConnect);
this.Controls.Add(this.redisKey);
this.Controls.Add(this.label6);
this.Controls.Add(this.demandSlave);
this.Controls.Add(this.preferSlave);
this.Controls.Add(this.preferMaster);
this.Controls.Add(this.demandMaster);
this.Controls.Add(label5);
this.Controls.Add(label4);
this.Controls.Add(label3);
this.Controls.Add(label2);
this.Controls.Add(this.breakSocket);
this.Controls.Add(this.endpoints);
this.Controls.Add(this.console);
this.Controls.Add(label1);
this.Controls.Add(this.connect);
this.MinimumSize = new System.Drawing.Size(540, 430);
this.Name = "Form1";
this.Text = "Connection Watcher";
this.bulkOps.ResumeLayout(false);
this.bulkOps.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.bulkPerThread)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bulkThreads)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button connect;
private System.Windows.Forms.TextBox console;
private System.Windows.Forms.ListBox endpoints;
private System.Windows.Forms.Button breakSocket;
private System.Windows.Forms.Label demandMaster;
private System.Windows.Forms.Label preferMaster;
private System.Windows.Forms.Label preferSlave;
private System.Windows.Forms.Label demandSlave;
private System.Windows.Forms.Timer ticker;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label redisKey;
private System.Windows.Forms.CheckBox allowConnect;
private System.Windows.Forms.ComboBox connectionString;
private System.Windows.Forms.Button clearLog;
private System.Windows.Forms.Button deslave;
private System.Windows.Forms.Button shutdown;
private System.Windows.Forms.Button deify;
private System.Windows.Forms.Button export;
private System.Windows.Forms.Button reconfigure;
private System.Windows.Forms.CheckBox enableLog;
private System.Windows.Forms.Button disconnect;
private System.Windows.Forms.NumericUpDown bulkThreads;
private System.Windows.Forms.Button bulkBatch;
private System.Windows.Forms.Button bulkSync;
private System.Windows.Forms.Button bulkAsync;
private System.Windows.Forms.GroupBox bulkOps;
private System.Windows.Forms.Button bulkFF;
private System.Windows.Forms.NumericUpDown bulkPerThread;
private System.Windows.Forms.CheckBox sameKey;
private System.Windows.Forms.Button flush;
private System.Windows.Forms.Button clearStormLog;
}
}
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using StackExchange.Redis;
namespace ConnectionWatcher
{
public partial class Form1 : Form
{
public Form1()
{
foreach(var file in Directory.GetFiles(Environment.CurrentDirectory, "Interactive_*.txt"))
{
File.Delete(file);
}
foreach (var file in Directory.GetFiles(Environment.CurrentDirectory, "Subscriber_*.txt"))
{
File.Delete(file);
}
InitializeComponent();
demandMaster.Text = preferMaster.Text = demandSlave.Text = preferSlave.Text = redisKey.Text = "";
#if !DEBUG
breakSocket.Text = allowConnect.Text = "#if DEBUG";
#endif
#if LOGOUTPUT
ConnectionMultiplexer.EchoPath = Environment.CurrentDirectory;
#endif
}
protected override void OnClosing(CancelEventArgs e)
{
SetEnabled(false);
}
private void disconnect_Click(object sender, EventArgs e)
{
SetEnabled(false);
}
private void SetEnabled(bool running)
{
connect.Enabled = connectionString.Enabled = !running;
shutdown.Enabled = endpoints.Enabled = deslave.Enabled = deify.Enabled = export.Enabled = reconfigure.Enabled =
disconnect.Enabled = bulkOps.Enabled = flush.Enabled = clearStormLog.Enabled = running;
#if DEBUG
breakSocket.Enabled = allowConnect.Enabled = running;
#endif
if (running) ticker.Start();
else ticker.Stop();
if (muxer != null)
{
muxer.Dispose();
muxer = null;
}
if(running)
{
console.Text = "";
var options = ConfigurationOptions.Parse(connectionString.Text);
options.AllowAdmin = true;
options.AbortOnConnectFail = false;
options.CertificateValidation += (sender, cert, chain, errors) =>
{
Log("cert issued to: " + cert.Subject);
return true; // fingers in ears, pretend we don't know this is wrong
};
using (var logger = new StringWriter())
{
muxer = ConnectionMultiplexer.Connect(options, logger);
Log(logger.ToString());
}
endpoints.Items.Clear();
endpoints.Items.AddRange(Array.ConvertAll(
muxer.GetEndPoints(), ep => new EndPointPair(muxer.GetServer(ep))));
muxer.ConnectionFailed += Muxer_ConnectionFailed;
muxer.ConnectionRestored += Muxer_ConnectionRestored;
muxer.ErrorMessage += Muxer_ErrorMessage;
muxer.ConfigurationChanged += Muxer_ConfigurationChanged;
}
}
private void connect_Clicked(object sender, EventArgs e)
{
SetEnabled(true);
}
private void Muxer_ConfigurationChanged(object sender, EndPointEventArgs e)
{
Log("Configuration changed: " + e.EndPoint);
}
private void Muxer_ErrorMessage(object sender, RedisErrorEventArgs e)
{
Log(e.EndPoint + ": " + e.Message);
}
private void Muxer_ConnectionRestored(object sender, ConnectionFailedEventArgs e)
{
Log("Endpoint restored: " + e.EndPoint);
}
private void Log(string message)
{
if(InvokeRequired)
{
BeginInvoke((MethodInvoker)delegate
{
if (enableLog.Checked)
console.Text = message + Environment.NewLine + console.Text;
});
} else
{
if(enableLog.Checked)
console.Text = message + Environment.NewLine + console.Text;
}
}
class EndPointPair
{
public EndPointPair(IServer server)
{
this.server = server;
}
private readonly IServer server;
public EndPoint EndPoint { get { return server == null ? null : server.EndPoint; } }
private string state;
public override string ToString()
{
try
{
string spacer;
switch (((uint)Thread.VolatileRead(ref loop)) % 4)
{
case 0: spacer = @" - "; break;
case 1: spacer = @" \ "; break;
case 2: spacer = @" | "; break;
case 3: spacer = @" / "; break;
default: spacer = " ! "; break;
}
return (server.IsSlave ? "S " : "M ") + EndPointCollection.ToString(EndPoint) + spacer + OpCount + ": " + state;
}
catch (Exception ex)
{
return ex.Message;
}
}
public long OpCount { get;set; }
int loop;
internal void SetState(string msg)
{
state = msg;
Interlocked.Increment(ref loop);
Interlocked.Exchange(ref concern, 0);
}
int concern;
internal bool Worried()
{
return Interlocked.Increment(ref concern) >= 5;
}
}
private void Muxer_ConnectionFailed(object sender, ConnectionFailedEventArgs e)
{
Log("Endpoint failed: " + e.EndPoint + ", " + e.FailureType + (e.Exception == null ? "" : (", " + e.Exception.Message)));
}
private void ticker_Tick(object sender, EventArgs e)
{
RefreshListBox();
if (muxer == null) return;
if(endpoints.SelectedIndices.Count == 1)
{
var ep = ((EndPointPair)endpoints.SelectedItem).EndPoint;
var server = muxer.GetServer(ep);
Text = server.ServerType + " " + server.Version + " " + (server.IsSlave ? "slave" : "master") + "; " + server.GetCounters().ToString();
}
foreach (var pair in endpoints.Items.OfType<EndPointPair>())
{
if(pair.Worried())
{
Log("No response from " + pair.EndPoint);
}
var server = muxer.GetServer(pair.EndPoint, pair);
var q = server.GetCounters();
pair.OpCount = q.Interactive.OperationCount;
if (q.TotalOutstanding > 5)
{
Log(q.ToString());
//#if DEBUG
// if(q.Interactive.PendingUnsentItems != 0 || q.Subscription.PendingUnsentItems != 0)
// {
// Log(((IRedisServerDebug)server).ListPending(100));
// }
//#endif
}
var ping = server.PingAsync().ContinueWith(UpdateEndPoint);
}
string s = Guid.NewGuid().ToString();
redisKey.Text = s;
RedisKey key = s;
var db = muxer.GetDatabase(asyncState: Stopwatch.StartNew());
db.IdentifyEndpointAsync(key, CommandFlags.DemandMaster).ContinueWith(DemandMaster);
db.IdentifyEndpointAsync(key, CommandFlags.PreferMaster).ContinueWith(PreferMaster);
db.IdentifyEndpointAsync(key, CommandFlags.PreferSlave).ContinueWith(PreferSlave);
db.IdentifyEndpointAsync(key, CommandFlags.DemandSlave).ContinueWith(DemandSlave);
// ThreadPool.QueueUserWorkItem(AccessSync);
}
private void AccessSync(object state)
{
var ep = muxer.GetEndPoints();
for (int i = 0; i < ep.Length; i++)
{
try
{ muxer.GetServer(ep[i]).Ping(); }
catch (Exception ex)
{
Log(ep[i] + ":" + ex.Message);
}
}
}
private void UpdateEndPoint(Task<TimeSpan> task)
{
string msg = ExtractMessage(task);
var pair = (EndPointPair)task.AsyncState;
if (pair != null)
{
BeginInvoke((MethodInvoker)delegate
{
pair.SetState(msg);
RefreshListBox();
});
}
}
void RefreshListBox()
{
if (InvokeRequired)
{
BeginInvoke((MethodInvoker)RefreshListBox);
}
else
{
// hacky "redraw your damned text", via http://stackoverflow.com/a/4631419/23354
// unfortunately, while this works, it breaks the selected items
bool[] selected = new bool[endpoints.Items.Count];
for (int i = 0; i < selected.Length; i++)
{
selected[i] = endpoints.GetSelected(i);
}
typeof(ListBox).InvokeMember("RefreshItems", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, endpoints, new object[] { });
for (int i = 0; i < selected.Length; i++)
{
endpoints.SetSelected(i, selected[i]);
}
}
}
static string ExtractMessage<T>(Task<T> task)
{
if (task == null) return "";
try
{
var status = task.Status;
switch (status)
{
case TaskStatus.RanToCompletion:
object result = task.Result;
if(result is TimeSpan)
{
return ((TimeSpan)result).TotalMilliseconds.ToString("###,##0.00ms");
}
if(result is EndPoint)
{
return EndPointCollection.ToString((EndPoint)result);
}
return Convert.ToString(result);
case TaskStatus.Faulted:
return string.Join(", ", task.Exception.InnerExceptions.Select(x => x.Message));
default:
task.ContinueWith(x =>
{
try
{ // mark observed
GC.KeepAlive(x.Exception);
}
catch
{ }
}, continuationOptions: TaskContinuationOptions.OnlyOnFaulted);
return status.ToString();
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private void DemandMaster(Task<EndPoint> task)
{
Write(demandMaster, task);
}
private void DemandSlave(Task<EndPoint> task)
{
Write(demandSlave, task);
}
private void PreferMaster(Task<EndPoint> task)
{
Write(preferMaster, task);
}
private void PreferSlave(Task<EndPoint> task)
{
Write(preferSlave, task);
}
private void Write(Label output, Task<EndPoint> task)
{
var watch = (Stopwatch)task.AsyncState;
var elapsed = watch.Elapsed;
output.BeginInvoke((MethodInvoker)delegate
{
string msg = ExtractMessage(task);
output.Text = elapsed.TotalMilliseconds.ToString("###,##0.00ms") + ": " + msg;
});
}
ConnectionMultiplexer muxer;
private void breakSocket_Click(object sender, EventArgs e)
{
#if DEBUG
foreach (var pair in endpoints.SelectedItems.OfType<EndPointPair>())
{
try
{
muxer.GetServer(pair.EndPoint).SimulateConnectionFailure();
} catch(Exception ex)
{
Log(ex.Message);
}
}
#endif
}
private void allowConnect_CheckedChanged(object sender, EventArgs e)
{
#if DEBUG
muxer.AllowConnect = allowConnect.Checked;
#endif
}
private void clearLog_Click(object sender, EventArgs e)
{
console.Text = "";
}
private void deslave_Click(object sender, EventArgs e)
{
foreach (var pair in endpoints.SelectedItems.OfType<EndPointPair>())
{
var sw = new StringWriter();
try
{
muxer.GetServer(pair.EndPoint).MakeMaster(ReplicationChangeOptions.None, sw);
} catch(Exception ex)
{
Log(ex.Message);
}
Log(sw.ToString());
}
}
private void shutdown_Click(object sender, EventArgs e)
{
foreach (var pair in endpoints.SelectedItems.OfType<EndPointPair>())
{
try
{
muxer.GetServer(pair.EndPoint).Shutdown();
} catch(Exception ex)
{
Log(ex.Message);
}
}
}
private void flush_Click(object sender, EventArgs e)
{
foreach (var pair in endpoints.SelectedItems.OfType<EndPointPair>())
{
try
{
muxer.GetServer(pair.EndPoint).FlushDatabase();
}
catch (Exception ex)
{
Log(ex.Message);
}
}
}
private void clearStormLog_Click(object sender, EventArgs e)
{
try
{
muxer.ResetStormLog();
}
catch (Exception ex)
{
Log(ex.Message);
}
}
private void deify_Click(object sender, EventArgs e)
{
var items = endpoints.SelectedItems.OfType<EndPointPair>().ToList();
if (items.Count != 1) return;
var sw = new StringWriter();
try
{
muxer.GetServer(items[0].EndPoint).MakeMaster(ReplicationChangeOptions.SetTiebreaker | ReplicationChangeOptions.Broadcast | ReplicationChangeOptions.EnslaveSubordinates, sw);
} catch(Exception ex)
{
Log(ex.Message);
}
Log(sw.ToString());
}
private void export_Click(object sender, EventArgs e)
{
try
{
using (var dlg = new SaveFileDialog())
{
dlg.Filter = "Zip Files | *.zip";
dlg.DefaultExt = "zip";
if (dlg.ShowDialog(this) == DialogResult.OK)
{
string path = dlg.FileName;
if(!string.IsNullOrEmpty(path))
{
using(var file = File.Create(path))
{
muxer.ExportConfiguration(file);
}
}
}
}
}
catch (Exception ex)
{
Log(ex.Message);
}
}
private void reconfigure_Click(object sender, EventArgs e)
{
using(var writer = new StringWriter())
{
try
{
muxer.Configure(writer);
} catch(Exception ex)
{
Log(ex.Message);
}
Log(writer.ToString());
}
}
private void bulkSync_Click(object sender, EventArgs e)
{
RunConcurrent(0.1M, (db, count, key) => {
while(count-- > 0) db.StringIncrement(key());
return null;
}, "Bulk sync");
}
private void bulkFF_Click(object sender, EventArgs e)
{
RunConcurrent(1, (db, count, key) => {
while (count-- > 0) db.StringIncrement(key(), flags: CommandFlags.FireAndForget);
return null;
}, "Bulk F+F");
}
private void bulkAsync_Click(object sender, EventArgs e)
{
RunConcurrent(1, (db, count, key) => {
while (count-- > 1) db.StringIncrementAsync(key(), flags: CommandFlags.FireAndForget);
return db.StringIncrementAsync(key());
}, "Bulk async");
}
private void bulkBatch_Click(object sender, EventArgs e)
{
RunConcurrent(1, (db, count, key) =>
{
var batch = db.CreateBatch();
while (count-- > 1) batch.StringIncrementAsync(key(), flags: CommandFlags.FireAndForget);
Task last = db.StringIncrementAsync(key());
batch.Execute();
return last;
}, "Bulk batch");
}
private void RunConcurrent(decimal factor, Func<IDatabase, int, Func<RedisKey>, Task> work, [CallerMemberName] string caller = null, Action<Func<RedisKey>> whenDone = null, int timeout = 10000)
{
int threads = (int)bulkThreads.Value;
int perThread = (int)(bulkPerThread.Value * factor);
ThreadPool.QueueUserWorkItem(delegate
{
Func<RedisKey> keyFunc;
if(sameKey.Checked)
{
RedisKey key = Guid.NewGuid().ToString();
keyFunc = () => key;
} else
{
keyFunc = () => Guid.NewGuid().ToString();
}
Task last = null;
var db = muxer.GetDatabase();
db.KeyDelete(keyFunc(), CommandFlags.FireAndForget);
try
{
if (work == null) return;
if (threads < 1) return;
Stopwatch watch = null;
ManualResetEvent allDone = new ManualResetEvent(false);
object token = new object();
int active = 0;
ThreadStart callback = delegate
{
lock (token)
{
int nowActive = Interlocked.Increment(ref active);
if (nowActive == threads)
{
watch = Stopwatch.StartNew();
Monitor.PulseAll(token);
}
else
{
Monitor.Wait(token);
}
}
var result = work(db, perThread, keyFunc);
if (result != null) Interlocked.Exchange(ref last, result);
if (Interlocked.Decrement(ref active) == 0)
{
allDone.Set();
}
};
Thread[] threadArr = new Thread[threads];
for (int i = 0; i < threads; i++)
{
var thd = new Thread(callback);
thd.Name = caller;
threadArr[i] = thd;
thd.Start();
}
if (allDone.WaitOne(timeout))
{
if (whenDone != null) whenDone(keyFunc);
var result = db.StringGet(keyFunc());
watch.Stop();
var finalTask = Interlocked.Exchange(ref last, null);
if (finalTask != null) Log("Last task is: " + finalTask.Status.ToString());
Log(string.Format("{0}, {1} per-thread on {2} threads: {3:###,###,##0.##}ms, {4:###,###,##0}ops/s (result: {5})",
caller, perThread, threads,
watch.Elapsed.TotalMilliseconds,
(int)((perThread * threads) / watch.Elapsed.TotalSeconds),
result));
}
else
{
for (int i = 0; i < threads; i++)
{
var thd = threadArr[i];
if (thd.IsAlive) thd.Abort();
}
Log(string.Format("{0} timed out", caller));
}
}
catch (Exception ex)
{
Log(string.Format("{0} failed: {1}", caller, ex.Message));
}
finally
{
db.KeyDelete(keyFunc(), CommandFlags.FireAndForget);
}
});
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label3.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label4.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label5.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="ticker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
\ No newline at end of file
using System;
using System.Windows.Forms;
namespace ConnectionWatcher
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ConnectionWatcher")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ConnectionWatcher")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f494c35a-e665-4f46-9906-dbb873e00b51")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34011
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ConnectionWatcher.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ConnectionWatcher.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34011
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ConnectionWatcher.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
...@@ -30,15 +30,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RedisConfigs", "RedisConfig ...@@ -30,15 +30,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RedisConfigs", "RedisConfig
RedisConfigs\start-sentinel.cmd = RedisConfigs\start-sentinel.cmd RedisConfigs\start-sentinel.cmd = RedisConfigs\start-sentinel.cmd
EndProjectSection EndProjectSection
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis", "StackExchange.Redis\StackExchange.Redis.csproj", "{EF84877F-59BE-41BE-9013-E765AF0BB72E}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis", "src\StackExchange.Redis\StackExchange.Redis.csproj", "{EF84877F-59BE-41BE-9013-E765AF0BB72E}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis.Tests", "StackExchange.Redis.Tests\StackExchange.Redis.Tests.csproj", "{3B8BD8F1-8BFC-4D8C-B4DA-25FFAF3D1DBE}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis.Tests", "tests\StackExchange.Redis.Tests\StackExchange.Redis.Tests.csproj", "{3B8BD8F1-8BFC-4D8C-B4DA-25FFAF3D1DBE}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTest", "BasicTest\BasicTest.csproj", "{939FA5F7-16AA-4847-812B-6EBC3748A86D}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTest", "tests\BasicTest\BasicTest.csproj", "{939FA5F7-16AA-4847-812B-6EBC3748A86D}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NRediSearch", "NRediSearch\NRediSearch.csproj", "{71455B07-E628-4F3A-9FFF-9EC63071F78E}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NRediSearch", "src\NRediSearch\NRediSearch.csproj", "{71455B07-E628-4F3A-9FFF-9EC63071F78E}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NRediSearch.Test", "NRediSearch.Test\NRediSearch.Test.csproj", "{94D233F5-2400-4542-98B9-BA72005C57DC}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NRediSearch.Test", "tests\NRediSearch.Test\NRediSearch.Test.csproj", "{94D233F5-2400-4542-98B9-BA72005C57DC}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sentinel", "Sentinel", "{36255A0A-89EC-43C8-A642-F4C1ACAEF5BC}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sentinel", "Sentinel", "{36255A0A-89EC-43C8-A642-F4C1ACAEF5BC}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
...@@ -71,11 +71,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Basic", "Basic", "{38BDEEED ...@@ -71,11 +71,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Basic", "Basic", "{38BDEEED
RedisConfigs\Basic\slave-6380.conf = RedisConfigs\Basic\slave-6380.conf RedisConfigs\Basic\slave-6380.conf = RedisConfigs\Basic\slave-6380.conf
EndProjectSection EndProjectSection
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestBaseline", "BasicTestBaseline\BasicTestBaseline.csproj", "{8FDB623D-779B-4A84-BC6B-75106E41D8A4}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestBaseline", "tests\BasicTestBaseline\BasicTestBaseline.csproj", "{8FDB623D-779B-4A84-BC6B-75106E41D8A4}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestConsole", "TestConsole\TestConsole.csproj", "{651FDB97-9DE3-4BD9-9A05-827AF8F1A94A}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestConsole", "toys\TestConsole\TestConsole.csproj", "{651FDB97-9DE3-4BD9-9A05-827AF8F1A94A}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis.StrongName", "StackExchange.Redis.StrongName\StackExchange.Redis.StrongName.csproj", "{769640F3-889C-4E8A-A7DF-916AE9B432A6}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis.StrongName", "src\StackExchange.Redis.StrongName\StackExchange.Redis.StrongName.csproj", "{769640F3-889C-4E8A-A7DF-916AE9B432A6}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Failover", "Failover", "{D082703F-1652-4C35-840D-7D377F6B9979}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Failover", "Failover", "{D082703F-1652-4C35-840D-7D377F6B9979}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
...@@ -83,9 +83,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Failover", "Failover", "{D0 ...@@ -83,9 +83,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Failover", "Failover", "{D0
RedisConfigs\Failover\slave-6383.conf = RedisConfigs\Failover\slave-6383.conf RedisConfigs\Failover\slave-6383.conf = RedisConfigs\Failover\slave-6383.conf
EndProjectSection EndProjectSection
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis.Server", "StackExchange.Redis.Server\StackExchange.Redis.Server.csproj", "{8375813E-FBAF-4DA3-A2C7-E4645B39B931}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackExchange.Redis.Server", "toys\StackExchange.Redis.Server\StackExchange.Redis.Server.csproj", "{8375813E-FBAF-4DA3-A2C7-E4645B39B931}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KestrelRedisServer", "KestrelRedisServer\KestrelRedisServer.csproj", "{3DA1EEED-E9FE-43D9-B293-E000CFCCD91A}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KestrelRedisServer", "toys\KestrelRedisServer\KestrelRedisServer.csproj", "{3DA1EEED-E9FE-43D9-B293-E000CFCCD91A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{73A5C363-CA1F-44C4-9A9B-EF791A76BA6A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{00CA0876-DA9F-44E8-B0DC-A88716BF347A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "toys", "toys", "{E25031D3-5C64-430D-B86F-697B66816FD8}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
...@@ -138,10 +144,21 @@ Global ...@@ -138,10 +144,21 @@ Global
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05} = {73A5C363-CA1F-44C4-9A9B-EF791A76BA6A}
{EF84877F-59BE-41BE-9013-E765AF0BB72E} = {00CA0876-DA9F-44E8-B0DC-A88716BF347A}
{3B8BD8F1-8BFC-4D8C-B4DA-25FFAF3D1DBE} = {73A5C363-CA1F-44C4-9A9B-EF791A76BA6A}
{939FA5F7-16AA-4847-812B-6EBC3748A86D} = {73A5C363-CA1F-44C4-9A9B-EF791A76BA6A}
{71455B07-E628-4F3A-9FFF-9EC63071F78E} = {00CA0876-DA9F-44E8-B0DC-A88716BF347A}
{94D233F5-2400-4542-98B9-BA72005C57DC} = {73A5C363-CA1F-44C4-9A9B-EF791A76BA6A}
{36255A0A-89EC-43C8-A642-F4C1ACAEF5BC} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05} {36255A0A-89EC-43C8-A642-F4C1ACAEF5BC} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05}
{A3B4B972-5BD2-4D90-981F-7E51E350E628} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05} {A3B4B972-5BD2-4D90-981F-7E51E350E628} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05}
{38BDEEED-7BEB-4B1F-9CE0-256D63F9C502} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05} {38BDEEED-7BEB-4B1F-9CE0-256D63F9C502} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05}
{8FDB623D-779B-4A84-BC6B-75106E41D8A4} = {73A5C363-CA1F-44C4-9A9B-EF791A76BA6A}
{651FDB97-9DE3-4BD9-9A05-827AF8F1A94A} = {E25031D3-5C64-430D-B86F-697B66816FD8}
{769640F3-889C-4E8A-A7DF-916AE9B432A6} = {00CA0876-DA9F-44E8-B0DC-A88716BF347A}
{D082703F-1652-4C35-840D-7D377F6B9979} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05} {D082703F-1652-4C35-840D-7D377F6B9979} = {96E891CD-2ED7-4293-A7AB-4C6F5D8D2B05}
{8375813E-FBAF-4DA3-A2C7-E4645B39B931} = {E25031D3-5C64-430D-B86F-697B66816FD8}
{3DA1EEED-E9FE-43D9-B293-E000CFCCD91A} = {E25031D3-5C64-430D-B86F-697B66816FD8}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {193AA352-6748-47C1-A5FC-C9AA6B5F000B} SolutionGuid = {193AA352-6748-47C1-A5FC-C9AA6B5F000B}
......
...@@ -7,7 +7,7 @@ init: ...@@ -7,7 +7,7 @@ init:
install: install:
- cmd: >- - cmd: >-
cd RedisConfigs\3.0.503 cd tests\RedisConfigs\3.0.503
redis-server.exe --service-install --service-name "redis-6379" "..\Basic\master-6379.conf" redis-server.exe --service-install --service-name "redis-6379" "..\Basic\master-6379.conf"
...@@ -39,15 +39,15 @@ install: ...@@ -39,15 +39,15 @@ install:
redis-server.exe --service-install --service-name "redis-26380" "..\Sentinel\sentinel-26380.conf" --sentinel redis-server.exe --service-install --service-name "redis-26380" "..\Sentinel\sentinel-26380.conf" --sentinel
cd ..\.. cd ..\..\..
- sh: >- - sh: >-
cd RedisConfigs cd tests/RedisConfigs
chmod +x start-all.sh chmod +x start-all.sh
./start-all.sh ./start-all.sh
cd .. cd ../..
- ps: >- - ps: >-
if (Get-Command "Start-Service" -errorAction SilentlyContinue) { if (Get-Command "Start-Service" -errorAction SilentlyContinue) {
Start-Service redis-* Start-Service redis-*
...@@ -74,7 +74,7 @@ deploy: ...@@ -74,7 +74,7 @@ deploy:
- provider: NuGet - provider: NuGet
server: https://www.myget.org/F/stackoverflow/api/v2 server: https://www.myget.org/F/stackoverflow/api/v2
on: on:
branch: master branch: master
api_key: api_key:
secure: P/UHxq2DEs0GI1SoDXDesHjRVsSVgdywz5vmsnhFQQY5aJgO3kP+QfhwfhXz19Rw secure: P/UHxq2DEs0GI1SoDXDesHjRVsSVgdywz5vmsnhFQQY5aJgO3kP+QfhwfhXz19Rw
symbol_server: https://www.myget.org/F/stackoverflow/symbols/api/v2/package symbol_server: https://www.myget.org/F/stackoverflow/symbols/api/v2/package
\ No newline at end of file
...@@ -27,8 +27,8 @@ if ($PullRequestNumber) { ...@@ -27,8 +27,8 @@ if ($PullRequestNumber) {
Write-Host "Building projects..." -ForegroundColor "Magenta" Write-Host "Building projects..." -ForegroundColor "Magenta"
foreach ($project in $projectsToBuild + $testsToRun) { foreach ($project in $projectsToBuild + $testsToRun) {
Write-Host "Building $project (dotnet restore/build)..." -ForegroundColor "Magenta" Write-Host "Building $project (dotnet restore/build)..." -ForegroundColor "Magenta"
dotnet restore ".\$project\$project.csproj" /p:CI=true dotnet restore ".\src\$project\$project.csproj" /p:CI=true
dotnet build ".\$project\$project.csproj" -c Release /p:CI=true dotnet build ".\src\$project\$project.csproj" -c Release /p:CI=true
Write-Host "" Write-Host ""
} }
Write-Host "Done building." -ForegroundColor "Green" Write-Host "Done building." -ForegroundColor "Green"
...@@ -42,7 +42,7 @@ if ($RunTests) { ...@@ -42,7 +42,7 @@ if ($RunTests) {
foreach ($project in $testsToRun) { foreach ($project in $testsToRun) {
Write-Host "Running tests: $project (all frameworks)" -ForegroundColor "Magenta" Write-Host "Running tests: $project (all frameworks)" -ForegroundColor "Magenta"
#Push-Location ".\tests\$project" #Push-Location ".\tests\$project"
Push-Location ".\$project" Push-Location ".\tests\$project"
dotnet test -c Release dotnet test -c Release
if ($LastExitCode -ne 0) { if ($LastExitCode -ne 0) {
...@@ -66,7 +66,7 @@ if ($CreatePackages) { ...@@ -66,7 +66,7 @@ if ($CreatePackages) {
foreach ($project in $projectsToBuild) { foreach ($project in $projectsToBuild) {
Write-Host "Packing $project (dotnet pack)..." -ForegroundColor "Magenta" Write-Host "Packing $project (dotnet pack)..." -ForegroundColor "Magenta"
dotnet pack ".\$project\$project.csproj" --no-build -c Release /p:PackageOutputPath=$packageOutputFolder /p:NoPackageAnalysis=true /p:CI=true dotnet pack ".\src\$project\$project.csproj" --no-build -c Release /p:PackageOutputPath=$packageOutputFolder /p:NoPackageAnalysis=true /p:CI=true
Write-Host "" Write-Host ""
} }
} }
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\StackExchange.Redis\StackExchange.Redis.csproj" /> <ProjectReference Include="..\StackExchange.Redis\StackExchange.Redis.csproj" />
</ItemGroup> </ItemGroup>
......
...@@ -13,10 +13,7 @@ ...@@ -13,10 +13,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.11.0" /> <PackageReference Include="BenchmarkDotNet" Version="0.11.0" />
</ItemGroup> <ProjectReference Include="..\..\src\StackExchange.Redis\StackExchange.Redis.csproj" />
<ItemGroup>
<ProjectReference Include="..\StackExchange.Redis\StackExchange.Redis.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -18,9 +18,6 @@ ...@@ -18,9 +18,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.11.0" /> <PackageReference Include="BenchmarkDotNet" Version="0.11.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="StackExchange.Redis" Version="1.2.7-alpha-00002" /> <PackageReference Include="StackExchange.Redis" Version="1.2.7-alpha-00002" />
</ItemGroup> </ItemGroup>
......
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
<SignAssembly>true</SignAssembly> <SignAssembly>true</SignAssembly>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\StackExchange.Redis\StackExchange.Redis.csproj" /> <ProjectReference Include="..\..\src\NRediSearch\NRediSearch.csproj" />
<ProjectReference Include="..\NRediSearch\NRediSearch.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" />
<PackageReference Include="xunit" Version="$(xUnitVersion)" /> <PackageReference Include="xunit" Version="$(xUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(xUnitVersion)" /> <PackageReference Include="xunit.runner.visualstudio" Version="$(xUnitVersion)" />
......
port 7010
maxmemory 100mb
appendonly no
dir "/mnt/c/git/StackExchange/StackExchange.Redis/tests/RedisConfigs/Temp"
dbfilename "sentinel-target-7010.rdb"
# Generated by CONFIG REWRITE
port 7011
maxmemory 100mb
appendonly no
dir "/mnt/c/git/StackExchange/StackExchange.Redis/tests/RedisConfigs/Temp"
dbfilename "sentinel-target-7011.rdb"
# Generated by CONFIG REWRITE
slaveof 127.0.0.1 7010
port 26379
sentinel myid a89e7be5e3a895738e076ee1d83d39acf31791e3
sentinel monitor mymaster 127.0.0.1 7010 1
sentinel down-after-milliseconds mymaster 1000
sentinel failover-timeout mymaster 2000
dir "/mnt/c/git/StackExchange/StackExchange.Redis/tests/RedisConfigs/Temp"
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 6
sentinel known-slave mymaster 127.0.0.1 7011
sentinel known-sentinel mymaster 127.0.0.1 26380 5c07ed181e3f19808a7e7c5bdb32a9e319cd8364
sentinel current-epoch 6
port 26380
sentinel myid 5c07ed181e3f19808a7e7c5bdb32a9e319cd8364
sentinel monitor mymaster 127.0.0.1 7010 1
sentinel down-after-milliseconds mymaster 1000
sentinel failover-timeout mymaster 2000
dir "/mnt/c/git/StackExchange/StackExchange.Redis/tests/RedisConfigs/Temp"
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 1
sentinel known-slave mymaster 127.0.0.1 7011
sentinel known-sentinel mymaster 127.0.0.1 26379 a89e7be5e3a895738e076ee1d83d39acf31791e3
sentinel current-epoch 6
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\StackExchange.Redis\StackExchange.Redis.csproj" /> <ProjectReference Include="..\..\src\StackExchange.Redis\StackExchange.Redis.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.2" />
<PackageReference Include="Moq" Version="4.8.2" /> <PackageReference Include="Moq" Version="4.8.2" />
<PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" /> <PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" />
......
{
//"LogToConsole": false,
//"MasterServer": "[::1]",
//"SlaveServer": "[::1]",
//"SecureServer": "[::1]"
}
\ No newline at end of file
...@@ -5,13 +5,10 @@ ...@@ -5,13 +5,10 @@
<NoWarn>$(NoWarn);CS1591</NoWarn> <NoWarn>$(NoWarn);CS1591</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="2.1.0" /> <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="2.1.0" />
<ProjectReference Include="..\StackExchange.Redis.Server\StackExchange.Redis.Server.csproj" /> <ProjectReference Include="..\StackExchange.Redis.Server\StackExchange.Redis.Server.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\StackExchange.Redis\StackExchange.Redis.csproj" /> <ProjectReference Include="..\..\src\StackExchange.Redis\StackExchange.Redis.csproj" />
<PackageReference Include="System.Runtime.Caching" Version="4.5.0" /> <PackageReference Include="System.Runtime.Caching" Version="4.5.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\BasicTest\BasicTest.csproj" /> <ProjectReference Include="..\..\tests\BasicTest\BasicTest.csproj" />
<ProjectReference Include="..\StackExchange.Redis.Server\StackExchange.Redis.Server.csproj" /> <ProjectReference Include="..\StackExchange.Redis.Server\StackExchange.Redis.Server.csproj" />
<ProjectReference Include="..\StackExchange.Redis.Tests\StackExchange.Redis.Tests.csproj" /> <ProjectReference Include="..\..\tests\StackExchange.Redis.Tests\StackExchange.Redis.Tests.csproj" />
<ProjectReference Include="..\StackExchange.Redis\StackExchange.Redis.csproj" /> <ProjectReference Include="..\..\src\StackExchange.Redis\StackExchange.Redis.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment