Exemple #1
0
        public virtual async Task RestoreSnapshotAsync(ISnapshot snapshot)
        {
            Argument.IsNotNull(() => snapshot);

            Log.Info($"Restoring snapshot '{snapshot}'");

            await SnapshotRestoringAsync.SafeInvokeAsync(this, new SnapshotEventArgs(snapshot));

            var providers = GetProviders();

            foreach (var provider in providers)
            {
                await provider.RestoringSnapshotAsync(snapshot);
            }

            foreach (var provider in providers)
            {
                Log.Debug($"Restoring data for snapshot '{snapshot}' using provider '{provider}'");

                var names = provider.GetNames();

                foreach (var name in names)
                {
                    Log.Debug($"Restoring data for snapshot '{snapshot}' using provider '{provider}::{name}'");

                    var providerData = snapshot.GetData(name);
                    if (providerData == null)
                    {
                        providerData = new byte[] {};
                    }

                    using (var memoryStream = new MemoryStream(providerData))
                    {
                        await provider.RestoreDataFromSnapshotAsync(name, memoryStream);
                    }
                }
            }

            foreach (var provider in providers)
            {
                await provider.RestoredSnapshotAsync(snapshot);
            }

            SnapshotRestored.SafeInvoke(this, () => new SnapshotEventArgs(snapshot));

            Log.Info($"Restored snapshot '{snapshot}'");
        }