Skip to content

Latest commit

 

History

History
122 lines (104 loc) · 4.31 KB

service-fabric-reliable-actors-backup-and-restore.md

File metadata and controls

122 lines (104 loc) · 4.31 KB
title description ms.topic ms.author author ms.service services ms.date
Back up and restore Azure Service Fabric actors
Learn how to implement back up and restore in your Azure Service Fabric actors.
how-to
tomcassidy
tomvcassidy
service-fabric
service-fabric
07/11/2022

Implement Reliable Actors back up and restore

Note

Microsoft recommends to use Periodic back up and restore for configuring data backup of Reliable Stateful services and Reliable Actors.

In the following example, a custom actor service exposes a method to back up actor data by taking advantage of the remoting listener already present in ActorService:

public interface IMyActorService : IService
{
    Task BackupActorsAsync();
}

class MyActorService : ActorService, IMyActorService
{
    public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<ActorBase> newActor)
        : base(context, typeInfo, newActor)
    { }

    public Task BackupActorsAsync()
    {
        return this.BackupAsync(new BackupDescription(PerformBackupAsync));
    }

    private async Task<bool> PerformBackupAsync(BackupInfo backupInfo, CancellationToken cancellationToken)
    {
        try
        {
           // store the contents of backupInfo.Directory
           return true;
        }
        finally
        {
           Directory.Delete(backupInfo.Directory, recursive: true);
        }
    }
}
public interface MyActorService extends Service
{
    CompletableFuture<?> backupActorsAsync();
}

class MyActorServiceImpl extends ActorService implements MyActorService
{
    public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<FabricActorService, ActorId, ActorBase> newActor)
    {
       super(context, typeInfo, newActor);
    }

    public CompletableFuture backupActorsAsync()
    {
        return this.backupAsync(new BackupDescription((backupInfo, cancellationToken) -> performBackupAsync(backupInfo, cancellationToken)));
    }

    private CompletableFuture<Boolean> performBackupAsync(BackupInfo backupInfo, CancellationToken cancellationToken)
    {
        try
        {
           // store the contents of backupInfo.Directory
           return true;
        }
        finally
        {
           deleteDirectory(backupInfo.Directory)
        }
    }

    void deleteDirectory(File file) {
        File[] contents = file.listFiles();
        if (contents != null) {
            for (File f : contents) {
               deleteDirectory(f);
             }
        }
        file.delete();
    }
}

In this example, IMyActorService is a remoting contract that implements IService (C#) and Service (Java), and is then implemented by MyActorService. By adding this remoting contract, methods on IMyActorService are now also available to a client by creating a remoting proxy via ActorServiceProxy:

IMyActorService myActorServiceProxy = ActorServiceProxy.Create<IMyActorService>(
    new Uri("fabric:/MyApp/MyService"), ActorId.CreateRandom());

await myActorServiceProxy.BackupActorsAsync();
MyActorService myActorServiceProxy = ActorServiceProxy.create(MyActorService.class,
    new URI("fabric:/MyApp/MyService"), actorId);

myActorServiceProxy.backupActorsAsync();

For more information on Reliable Actors, read the following articles: