Ejemplo n.º 1
0
        public static bool TryRunAllUpgrades(string enlistmentRoot)
        {
            using (JsonEtwTracer tracer = new JsonEtwTracer(GVFSConstants.GVFSEtwProviderName, "DiskLayoutUpgrade"))
            {
                try
                {
                    DiskLayoutUpgrade upgrade = null;
                    while (TryFindUpgrade(tracer, enlistmentRoot, out upgrade))
                    {
                        if (upgrade == null)
                        {
                            return(true);
                        }

                        if (!upgrade.TryUpgrade(tracer, enlistmentRoot))
                        {
                            return(false);
                        }

                        if (!CheckLayoutVersionWasIncremented(tracer, enlistmentRoot, upgrade))
                        {
                            return(false);
                        }
                    }

                    return(false);
                }
                catch (Exception e)
                {
                    StartLogFile(enlistmentRoot, tracer);
                    tracer.RelatedError(e.ToString());
                    return(false);
                }
                finally
                {
                    RepoMetadata.Shutdown();
                }
            }
        }
Ejemplo n.º 2
0
        private static bool CheckLayoutVersionWasIncremented(JsonEtwTracer tracer, string enlistmentRoot, DiskLayoutUpgrade upgrade)
        {
            string error;
            int    actualVersion;

            if (!TryGetDiskLayoutVersion(tracer, enlistmentRoot, out actualVersion, out error))
            {
                tracer.RelatedError(error);
                return(false);
            }

            int expectedVersion = upgrade.SourceLayoutVersion + 1;

            if (actualVersion != expectedVersion)
            {
                throw new InvalidDataException(string.Format("Disk layout upgrade did not increment layout version. Expected: {0}, Actual: {1}", expectedVersion, actualVersion));
            }

            return(true);
        }
Ejemplo n.º 3
0
        private static bool TryFindUpgrade(JsonEtwTracer tracer, string enlistmentRoot, out DiskLayoutUpgrade upgrade)
        {
            int    version;
            string error;

            if (!TryGetDiskLayoutVersion(tracer, enlistmentRoot, out version, out error))
            {
                StartLogFile(enlistmentRoot, tracer);
                tracer.RelatedError(error);
                upgrade = null;
                return(false);
            }

            if (AllUpgrades.TryGetValue(version, out upgrade))
            {
                StartLogFile(enlistmentRoot, tracer);
                tracer.RelatedInfo("Upgrading from disk layout {0} to {1}", version, version + 1);
                return(true);
            }

            return(true);
        }
Ejemplo n.º 4
0
        protected bool TryIncrementDiskLayoutVersion(ITracer tracer, string enlistmentRoot, DiskLayoutUpgrade upgrade)
        {
            string newVersion  = (upgrade.SourceLayoutVersion + 1).ToString();
            string dotGVFSPath = Path.Combine(enlistmentRoot, GVFSConstants.DotGVFS.Root);
            string error;

            if (!RepoMetadata.TryInitialize(tracer, dotGVFSPath, out error))
            {
                tracer.RelatedError("Could not initialize repo metadata: " + error);
                return(false);
            }

            RepoMetadata.Instance.SetEntry(RepoMetadata.Keys.DiskLayoutVersion, newVersion);
            tracer.RelatedInfo("Disk layout version is now: " + newVersion);
            return(true);
        }