Example #1
0
        private async Task RestoreAllPartitions(Guid version)
        {
            // Leader, distribute restore tasks to masters.
            var task_id = Guid.NewGuid();
            var masters = m_dmc.m_cloudidx.GetMasters();

            using (var req = new BackupTaskInformationWriter(task_id, version))
            {
                var rsps = await masters.Select(m => m.PersistedLoadPartition(req)).Unwrap();

                bool fail = false;
                foreach (var rsp in rsps)
                {
                    if (rsp.errno != Errno.E_OK)
                    {
                        fail = true;
                    }
                    rsp.Dispose();
                }
                if (fail)
                {
                    throw new RestoreException();
                }
            }
        }
Example #2
0
        private async Task BackupAllPartitions()
        {
            var version = await m_pstore.CreateNewVersion();

            // Leader, distribute backup tasks to masters.
            var task_id = Guid.NewGuid();
            var masters = m_dmc.m_cloudidx.GetMasters();

            try
            {
                using (var req = new BackupTaskInformationWriter(task_id, version))
                {
                    var rsps = await masters.Select(m => m.PersistedSavePartition(req)).Unwrap();

                    bool fail = false;
                    foreach (var rsp in rsps)
                    {
                        if (rsp.errno != Errno.E_OK)
                        {
                            fail = true;
                        }
                        rsp.Dispose();
                    }
                    if (fail)
                    {
                        throw new Exception();
                    }
                }
                await m_pstore.CommitVersion(version);
            }
            catch
            {
                await m_pstore.DeleteVersion(version);

                throw new BackupException();
            }
        }