Skip to content

Commit

Permalink
WIP: add & use in-process test cluster
Browse files Browse the repository at this point in the history
  • Loading branch information
ReubenBond committed Sep 25, 2024
1 parent c96f09f commit a907ae1
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 55 deletions.
2 changes: 0 additions & 2 deletions src/Orleans.Runtime/Silo/SiloControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
using Orleans.Providers;
using Orleans.Runtime.GrainDirectory;
using Orleans.Runtime.Placement;
using Orleans.Runtime.GrainDirectory;
using Orleans.Runtime.Versions;
using Orleans.Runtime.Versions.Compatibility;
using Orleans.Runtime.Versions.Selector;
Expand All @@ -20,7 +19,6 @@
using Orleans.Versions.Compatibility;
using Orleans.Versions.Selector;


namespace Orleans.Runtime
{
internal class SiloControl : SystemTarget, ISiloControl
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using TestExtensions;
using Orleans.Configuration;
using Orleans.TestingHost;
using Microsoft.Extensions.DependencyInjection;

namespace UnitTests.ActivationRebalancingTests;

public class RebalancerFixture : BaseInProcessTestClusterFixture
{
public static readonly TimeSpan RebalancerDueTime = TimeSpan.FromSeconds(5);
public static readonly TimeSpan SessionCyclePeriod = TimeSpan.FromSeconds(3);

protected override void ConfigureTestCluster(InProcessTestClusterBuilder builder)
{
builder.Options.InitialSilosCount = 4;
builder.Options.UseRealEnvironmentStatistics = true;
builder.ConfigureSilo((options, siloBuilder)
#pragma warning disable ORLEANSEXP002
=> siloBuilder
.Configure<SiloMessagingOptions>(o =>
{
o.AssumeHomogenousSilosForTesting = true;
o.ClientGatewayShutdownNotificationTimeout = default;
})
.Configure<ActivationRebalancerOptions>(o =>
{
o.RebalancerDueTime = RebalancerDueTime;
o.SessionCyclePeriod = SessionCyclePeriod;
})
.AddActivationRebalancer());
#pragma warning restore ORLEANSEXP002
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
using TestExtensions;
using Xunit.Abstractions;
using Orleans.Configuration;
using Orleans.TestingHost;
using Orleans.Runtime.Placement;
using Microsoft.Extensions.DependencyInjection;

namespace UnitTests.ActivationRebalancingTests;

public abstract class RebalancingTestBase<TFixture> : BaseTestClusterFixture
where TFixture : BaseTestClusterFixture
public abstract class RebalancingTestBase<TFixture>
where TFixture : BaseInProcessTestClusterFixture
{
protected TestCluster Cluster { get; }
protected InProcessTestCluster Cluster { get; }

protected SiloAddress Silo1 { get; }
protected SiloAddress Silo2 { get; }
protected SiloAddress Silo3 { get; }
protected SiloAddress Silo4 { get; }

internal ITestOutputHelper OutputHelper { get; }
internal new IInternalGrainFactory GrainFactory { get; }
internal IInternalGrainFactory GrainFactory { get; }
internal IManagementGrain MgmtGrain { get; }

protected RebalancingTestBase(TFixture fixture, ITestOutputHelper output)
Expand All @@ -32,7 +30,7 @@ protected RebalancingTestBase(TFixture fixture, ITestOutputHelper output)

Cluster = fixture.HostedCluster;
OutputHelper = output;
GrainFactory = fixture.HostedCluster.InternalGrainFactory;
GrainFactory = (IInternalGrainFactory)fixture.HostedCluster.Client;
MgmtGrain = GrainFactory.GetGrain<IManagementGrain>(0);
}

Expand All @@ -57,45 +55,11 @@ protected static int CalculateVariance(int[] values)
return (int)variance;
}

public override async Task InitializeAsync()
public async Task InitializeAsync()
{
await GrainFactory
.GetGrain<IManagementGrain>(0)
.ForceActivationCollection(TimeSpan.Zero);

await base.InitializeAsync();
}
}

public class RebalancerFixture : BaseTestClusterFixture
{
public static readonly TimeSpan RebalancerDueTime = TimeSpan.FromSeconds(5);
public static readonly TimeSpan SessionCyclePeriod = TimeSpan.FromSeconds(3);

protected override void ConfigureTestCluster(TestClusterBuilder builder)
{
builder.Options.InitialSilosCount = 4;
builder.Options.UseRealEnvironmentStatistics = true;
builder.AddSiloBuilderConfigurator<SiloConfigurator>();
}

private class SiloConfigurator : ISiloConfigurator
{
public void Configure(ISiloBuilder siloBuilder)
#pragma warning disable ORLEANSEXP002
=> siloBuilder
.Configure<SiloMessagingOptions>(o =>
{
o.AssumeHomogenousSilosForTesting = true;
o.ClientGatewayShutdownNotificationTimeout = default;
})
.Configure<ActivationRebalancerOptions>(o =>
{
o.RebalancerDueTime = RebalancerDueTime;
o.SessionCyclePeriod = SessionCyclePeriod;
})
.AddActivationRebalancer();
#pragma warning restore ORLEANSEXP002
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public async Task Should_Migrate_And_Preserve_State_When_Hosting_Silo_Dies()

// Move the rebalancer to the first secondary silo, since we will stop it later and we cannot stop
// the primary in this test setup.
RequestContext.Set(IPlacementDirector.PlacementHintKey, Cluster.SecondarySilos[0].SiloAddress);
RequestContext.Set(IPlacementDirector.PlacementHintKey, Cluster.Silos[1].SiloAddress);
await Cluster.Client.GetGrain<IActivationRebalancerWorker>(0).Cast<IGrainManagementExtension>().MigrateOnIdle();
RequestContext.Set(IPlacementDirector.PlacementHintKey, null);

Expand Down Expand Up @@ -70,7 +70,7 @@ public async Task Should_Migrate_And_Preserve_State_When_Hosting_Silo_Dies()

OutputHelper.WriteLine($"Cycle {index}: Now stopping Silo{rebalancerHostNum}, which is the host of the rebalancer\n");

Assert.NotEqual(rebalancerHost, Cluster.Primary.SiloAddress);
Assert.NotEqual(rebalancerHost, Cluster.Silos[0].SiloAddress);
await Cluster.StopSiloAsync(Cluster.Silos.First(x => x.SiloAddress.Equals(rebalancerHost)));
}

Expand Down Expand Up @@ -177,21 +177,16 @@ public async Task Should_Migrate_And_Preserve_State_When_Hosting_Silo_Dies()
return new(SiloAddress.Zero, 0);
}

public class StatePreservationFixture : BaseTestClusterFixture
public class StatePreservationFixture : BaseInProcessTestClusterFixture
{
public static readonly TimeSpan RebalancerDueTime = TimeSpan.FromSeconds(5);
public static readonly TimeSpan SessionCyclePeriod = TimeSpan.FromSeconds(3);

protected override void ConfigureTestCluster(TestClusterBuilder builder)
protected override void ConfigureTestCluster(InProcessTestClusterBuilder builder)
{
builder.Options.InitialSilosCount = 4;
builder.Options.UseRealEnvironmentStatistics = true;
builder.AddSiloBuilderConfigurator<Configurator>();
}

private class Configurator : ISiloConfigurator
{
public void Configure(ISiloBuilder siloBuilder)
builder.ConfigureSilo((options, siloBuilder)
#pragma warning disable ORLEANSEXP002
=> siloBuilder
.Configure<SiloMessagingOptions>(o =>
Expand All @@ -205,7 +200,7 @@ public void Configure(ISiloBuilder siloBuilder)
o.RebalancerDueTime = RebalancerDueTime;
o.SessionCyclePeriod = SessionCyclePeriod;
})
.AddActivationRebalancer();
.AddActivationRebalancer());
#pragma warning restore ORLEANSEXP002
}
}
Expand Down

0 comments on commit a907ae1

Please sign in to comment.