Skip to content

Commit

Permalink
Merge branch 'main' into fix/add-missing-query-in-mysql-clustering-sc…
Browse files Browse the repository at this point in the history
…ript
  • Loading branch information
juan-arias authored Mar 20, 2024
2 parents df79f79 + 005ab20 commit 823b7d0
Show file tree
Hide file tree
Showing 33 changed files with 423 additions and 474 deletions.
46 changes: 34 additions & 12 deletions .azure/pipelines/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,38 @@ parameters:
variables:
- template: templates/vars.yaml

jobs:
- template: templates/build.yaml
resources:
repositories:
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release

extends:
${{ if eq(variables['System.TeamProject'], 'GitHub - PR Builds') }}:
template: v1/1ES.Unofficial.PipelineTemplate.yml@1ESPipelineTemplates
${{ else }}:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
build_configuration: ${{ parameters.build_configuration }}
version_prefix: ${{ parameters.version_prefix }}
include_suffix: ${{ parameters.include_suffix }}
version_suffix: ${{ parameters.version_suffix }}
codesign: ${{ parameters.codesign }}
skip_test: ${{ parameters.skip_test }}
publish_nightly: false
frameworks: ${{ parameters.frameworks }}
tests_categories: ${{ parameters.tests_categories }}
runCodeQL3000: ${{ parameters.runCodeQL3000 }}
settings:
skipBuildTagsForGitHubPullRequests: true
pool:
name: $(pool_name)
image: orleans-build-image
os: windows
stages:
- stage: build_test
displayName: Build and Tests
jobs:
- template: /.azure/pipelines/templates/build.yaml@self
parameters:
build_configuration: ${{ parameters.build_configuration }}
version_prefix: ${{ parameters.version_prefix }}
include_suffix: ${{ parameters.include_suffix }}
version_suffix: ${{ parameters.version_suffix }}
codesign: ${{ parameters.codesign }}
skip_test: ${{ parameters.skip_test }}
publish_nightly: false
frameworks: ${{ parameters.frameworks }}
tests_categories: ${{ parameters.tests_categories }}
runCodeQL3000: ${{ parameters.runCodeQL3000 }}
40 changes: 31 additions & 9 deletions .azure/pipelines/nightly-main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,35 @@ schedules:
variables:
- template: templates/vars.yaml

jobs:
- template: templates/build.yaml
resources:
repositories:
- repository: 1ESPipelineTemplates
type: git
name: 1ESPipelineTemplates/1ESPipelineTemplates
ref: refs/tags/release

extends:
${{ if eq(variables['System.TeamProject'], 'GitHub - PR Builds') }}:
template: v1/1ES.Unofficial.PipelineTemplate.yml@1ESPipelineTemplates
${{ else }}:
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
parameters:
build_configuration: Release
version_prefix: '8.1.0'
include_suffix: true
version_suffix: nightly.$(Build.BuildNumber)
codesign: true
publish_nightly: true
skip_test: true
settings:
skipBuildTagsForGitHubPullRequests: true
pool:
name: $(pool_name)
image: orleans-build-image
os: windows
stages:
- stage: build_test
displayName: Build and Tests
jobs:
- template: /.azure/pipelines/templates/build.yaml@self
parameters:
build_configuration: Release
version_prefix: '8.1.0'
include_suffix: true
version_suffix: nightly.$(Build.BuildNumber)
codesign: true
publish_nightly: true
skip_test: true
40 changes: 15 additions & 25 deletions .azure/pipelines/templates/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,20 @@ jobs:
- job: Build
pool: $(pool_name)
displayName: Build and create NuGet packages
${{ if ne(variables['System.TeamProject'], 'GitHub - PR Builds') }}:
templateContext:
outputs:
- output: pipelineArtifact
targetPath: '$(build.sourcesdirectory)/Artifacts/${{parameters.build_configuration}}'
artifactName: nuget
# Publish packages to nightly
- ${{ if and(eq(parameters.codesign, true), eq(parameters.publish_nightly, true)) }}:
- output: nuget
useDotNetTask: false
packagesToPush: $(Pipeline.Workspace)/nuget/**/*.nupkg
nuGetFeedType: internal
publishVstsFeed: 'orleans-public/orleans-nightly'
allowPackageConflicts: true
steps:
- checkout: self
- task: UseDotNet@2
Expand Down Expand Up @@ -194,13 +208,6 @@ jobs:
]
SessionTimeout: 180
VerboseLogin: true
# End NuGet code signing
- ${{ if ne(variables['System.TeamProject'], 'GitHub - PR Builds') }}:
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: Nuget Packages'
inputs:
PathtoPublish: '$(build.sourcesdirectory)/Artifacts/${{parameters.build_configuration}}'
ArtifactName: nuget

# Tests
- ${{ if and(eq(parameters.skip_test, false), ne(variables.runCodeQL3000, 'true')) }}:
Expand Down Expand Up @@ -236,21 +243,4 @@ jobs:
arguments: '--no-build --framework ${{framework}} --configuration "${{parameters.build_configuration}}" --filter Category=${{category}} -- -parallel none -noshadow'
${{ if ne(variables['System.TeamProject'], 'GitHub - PR Builds') }}:
env:
ORLEANS_SECRETFILE: $(secretFile.secureFilePath)

# Publish packages to nightly feed
- ${{ if and(eq(parameters.codesign, true), eq(parameters.publish_nightly, true)) }}:
- job: Publish
dependsOn: Build
steps:
- download: current
artifact: nuget
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
publishVstsFeed: 'orleans-public/orleans-nightly'
packagesToPush: $(Pipeline.Workspace)/nuget/**/*.nupkg
allowPackageConflicts: true
ORLEANS_SECRETFILE: $(secretFile.secureFilePath)
2 changes: 0 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,6 @@ jobs:
run: dotnet test --filter "Category=${{ matrix.provider }}&(Category=BVT|Category=SlowBVT|Category=Functional)" --blame-hang-timeout 10m --logger "trx" -- -parallel none -noshadow
env:
# [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Not a secret")]
# [SuppressMessage("Microsoft.Security", "CSCAN0090:ConfigFile", Justification="Not a secret")]
# [SuppressMessage("Microsoft.Security", "CSCAN0220:DefaultPasswordContexts", Justification="Not a secret")]
ORLEANSMYSQLCONNECTIONSTRING: "Server=127.0.0.1;Port=3306;UId=root;Pwd=mariadb;"
- name: Archive Test Results
if: always()
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.Testing" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ Please see the [getting started tutorial](https://docs.microsoft.com/dotnet/orle
On Windows, run the `build.cmd` script to build the NuGet packages locally, then reference the required NuGet packages from `/Artifacts/Release/*`.
You can run `Test.cmd` to run all BVT tests, and `TestAll.cmd` to also run Functional tests.

On Linux and macOS, run the `build.sh` script or `dotnet build` to build Orleans.
On Linux and macOS, run `dotnet build` to build Orleans.

## Official builds

Expand Down
4 changes: 2 additions & 2 deletions src/Orleans.Core/Diagnostics/Metrics/Instruments.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Orleans.Runtime;

internal static class Instruments
public static class Instruments
{
internal static readonly Meter Meter = new("Microsoft.Orleans");
public static readonly Meter Meter = new("Microsoft.Orleans");
}
7 changes: 5 additions & 2 deletions src/Orleans.Runtime/GrainDirectory/CachedGrainLocator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using Orleans.Configuration;
using Orleans.GrainDirectory;
using Orleans.Internal;
Expand Down Expand Up @@ -30,12 +31,14 @@ internal interface ITestAccessor
MembershipVersion ITestAccessor.LastMembershipVersion { get; set; }

public CachedGrainLocator(
IServiceProvider serviceProvider,
GrainDirectoryResolver grainDirectoryResolver,
IClusterMembershipService clusterMembershipService)
IClusterMembershipService clusterMembershipService,
IOptions<GrainDirectoryOptions> grainDirectoryOptions)
{
this.grainDirectoryResolver = grainDirectoryResolver;
this.clusterMembershipService = clusterMembershipService;
this.cache = new LRUBasedGrainDirectoryCache(GrainDirectoryOptions.DEFAULT_CACHE_SIZE, GrainDirectoryOptions.DEFAULT_MAXIMUM_CACHE_TTL);
this.cache = GrainDirectoryCacheFactory.CreateCustomGrainDirectoryCache(serviceProvider, grainDirectoryOptions.Value);
}

public async ValueTask<GrainAddress> Lookup(GrainId grainId)
Expand Down
13 changes: 13 additions & 0 deletions src/Orleans.Runtime/GrainDirectory/GrainDirectoryCacheFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,19 @@ public static IGrainDirectoryCache CreateGrainDirectoryCache(IServiceProvider se
}
}

internal static IGrainDirectoryCache CreateCustomGrainDirectoryCache(IServiceProvider services, GrainDirectoryOptions options)
{
var grainDirectoryCache = services.GetService<IGrainDirectoryCache>();
if (grainDirectoryCache != null)
{
return grainDirectoryCache;
}
else
{
return new LRUBasedGrainDirectoryCache(options.CacheSize, options.MaximumCacheTTL);
}
}

internal static AdaptiveDirectoryCacheMaintainer CreateGrainDirectoryCacheMaintainer(
LocalGrainDirectory router,
IGrainDirectoryCache cache,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public GrainDirectoryResolver(
var services = serviceProvider.GetGrainDirectories();
foreach (var svc in services)
{
this.directoryPerName.Add(svc.Name, svc.Service);
this.directoryPerName.Add(svc.Name, serviceProvider.GetRequiredKeyedService<IGrainDirectory>(svc.Name));
}

this.directoryPerName.TryGetValue(GrainDirectoryAttribute.DEFAULT_GRAIN_DIRECTORY, out var defaultDirectory);
Expand Down
3 changes: 1 addition & 2 deletions src/Orleans.Runtime/Hosting/DefaultSiloServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,7 @@ internal static void AddDefaultServices(ISiloBuilder builder)
// Placement directors
services.AddPlacementDirector<RandomPlacement, RandomPlacementDirector>();
services.AddPlacementDirector<PreferLocalPlacement, PreferLocalPlacementDirector>();
services.AddPlacementDirector<StatelessWorkerPlacement, StatelessWorkerDirector>();
services.Replace(new ServiceDescriptor(typeof(StatelessWorkerPlacement), sp => new StatelessWorkerPlacement(), ServiceLifetime.Singleton));
services.AddPlacementDirector<StatelessWorkerPlacement, StatelessWorkerDirector>(ServiceLifetime.Transient);
services.AddPlacementDirector<ActivationCountBasedPlacement, ActivationCountPlacementDirector>();
services.AddPlacementDirector<HashBasedPlacement, HashBasedPlacementDirector>();
services.AddPlacementDirector<ClientObserversPlacement, ClientObserversPlacementDirector>();
Expand Down
45 changes: 17 additions & 28 deletions src/Orleans.Runtime/Hosting/DirectorySiloBuilderExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
#nullable enable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Orleans.GrainDirectory;
using Orleans.Hosting;
Expand All @@ -21,7 +19,7 @@ public static class DirectorySiloBuilderExtensions
/// <param name="implementationFactory">Factory to build the grain directory provider.</param>
/// <returns>The silo builder.</returns>
public static ISiloBuilder AddGrainDirectory<T>(this ISiloBuilder builder, string name, Func<IServiceProvider, string, T> implementationFactory)
where T : IGrainDirectory
where T : class, IGrainDirectory
{
builder.Services.AddGrainDirectory<T>(name, implementationFactory);
return builder;
Expand All @@ -37,38 +35,29 @@ public static ISiloBuilder AddGrainDirectory<T>(this ISiloBuilder builder, strin
/// <param name="implementationFactory">Factory to build the grain directory provider.</param>
/// <returns>The service collection.</returns>
public static IServiceCollection AddGrainDirectory<T>(this IServiceCollection collection, string name, Func<IServiceProvider, string, T> implementationFactory)
where T : IGrainDirectory
where T : class, IGrainDirectory
{
collection.AddSingleton(sp => new NamedService<IGrainDirectory>(name, implementationFactory(sp, name)));
// Check if the grain directory implements ILifecycleParticipant<ISiloLifecycle>
if (typeof(ILifecycleParticipant<ISiloLifecycle>).IsAssignableFrom(typeof(T)))
{
collection.AddSingleton(s => (ILifecycleParticipant<ISiloLifecycle>)s.GetGrainDirectory(name));
}
// Register the grain directory name so that directories can be enumerated by name.
collection.AddSingleton(sp => new NamedService<IGrainDirectory>(name));

// Register the grain directory implementation.
collection.AddKeyedSingleton<IGrainDirectory>(name, (sp, key) => implementationFactory(sp, name));
collection.AddSingleton<ILifecycleParticipant<ISiloLifecycle>>(s =>
s.GetKeyedService<IGrainDirectory>(name) as ILifecycleParticipant<ISiloLifecycle> ?? NoOpLifecycleParticipant.Instance);

return collection;
}

/// <summary>
/// Get the directory registered with <paramref name="name"/>.
/// </summary>
/// <param name="serviceProvider">The service provider.</param>
/// <param name="name">The name of the grain directory to resolve.</param>
/// <returns>The grain directory registered with <paramref name="name"/>, or <code>null</code> if it is not found</returns>
public static IGrainDirectory GetGrainDirectory(this IServiceProvider serviceProvider, string name)
internal static IEnumerable<NamedService<IGrainDirectory>> GetGrainDirectories(this IServiceProvider serviceProvider)
{
foreach (var directory in serviceProvider.GetGrainDirectories())
{
if (directory.Name.Equals(name))
{
return directory.Service;
}
}
return null;
return serviceProvider.GetServices<NamedService<IGrainDirectory>>() ?? [];
}

internal static IEnumerable<NamedService<IGrainDirectory>> GetGrainDirectories(this IServiceProvider serviceProvider)
private sealed class NoOpLifecycleParticipant : ILifecycleParticipant<ISiloLifecycle>
{
return serviceProvider.GetServices<NamedService<IGrainDirectory>>() ?? Enumerable.Empty<NamedService<IGrainDirectory>>();
public static readonly NoOpLifecycleParticipant Instance = new();

public void Participate(ISiloLifecycle observer) { }
}
}
}
16 changes: 5 additions & 11 deletions src/Orleans.Runtime/Hosting/NamedService.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
namespace Orleans.Runtime.Hosting
using System;

namespace Orleans.Runtime.Hosting
{
internal class NamedService<TService>
internal class NamedService<TService>(string name)
{
public NamedService(string name, TService service)
{
Name= name;
Service = service;
}

public string Name { get; }

public TService Service { get; }
public string Name { get; } = name;
}
}
Loading

0 comments on commit 823b7d0

Please sign in to comment.