public bool TryRegisterRepo(string repoRoot) { try { lock (this.repoLock) { Dictionary <string, RepoRegistration> allRepos = this.ReadRegistry(); RepoRegistration repo; if (allRepos.TryGetValue(repoRoot, out repo)) { if (!repo.IsActive) { repo.IsActive = true; this.WriteRegistry(allRepos); } } else { allRepos[repoRoot] = new RepoRegistration(repoRoot); this.WriteRegistry(allRepos); } } this.tracer.RelatedInfo("Registered repo {0}", repoRoot); return(true); } catch (Exception e) { this.tracer.RelatedError("Error while registering repo {0}: {1}", repoRoot, e.ToString()); } return(false); }
public bool TryRegisterRepo(string repoRoot, string ownerSID, out string errorMessage) { errorMessage = null; try { lock (this.repoLock) { Dictionary <string, RepoRegistration> allRepos = this.ReadRegistry(); RepoRegistration repo; if (allRepos.TryGetValue(repoRoot, out repo)) { if (!repo.IsActive) { repo.IsActive = true; repo.OwnerSID = ownerSID; this.WriteRegistry(allRepos); } } else { allRepos[repoRoot] = new RepoRegistration(repoRoot, ownerSID); this.WriteRegistry(allRepos); } } return(true); } catch (Exception e) { errorMessage = string.Format("Error while registering repo {0}: {1}", repoRoot, e.ToString()); } return(false); }
public Dictionary <string, RepoRegistration> ReadRegistry() { Dictionary <string, RepoRegistration> allRepos = new Dictionary <string, RepoRegistration>(StringComparer.OrdinalIgnoreCase); using (FileStream stream = new FileStream( Path.Combine(this.registryParentFolderPath, RegistryName), FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read)) { using (StreamReader reader = new StreamReader(stream)) { string versionString = reader.ReadLine(); int version; if (!int.TryParse(versionString, out version) || version > RegistryVersion) { if (versionString != null) { EventMetadata metadata = new EventMetadata(); metadata.Add("Area", EtwArea); metadata.Add("OnDiskVersion", versionString); metadata.Add("ExpectedVersion", versionString); metadata.Add("ErrorMessage", "ReadRegistry: Unsupported version"); this.tracer.RelatedError(metadata); } return(allRepos); } while (!reader.EndOfStream) { string entry = reader.ReadLine(); if (entry.Length > 0) { try { RepoRegistration registration = RepoRegistration.FromJson(entry); allRepos[registration.EnlistmentRoot] = registration; } catch (Exception e) { EventMetadata metadata = new EventMetadata(); metadata.Add("Area", EtwArea); metadata.Add("entry", entry); metadata.Add("Exception", e.ToString()); metadata.Add("ErrorMessage", "ReadRegistry: Failed to read entry"); this.tracer.RelatedError(metadata); } } } } } return(allRepos); }
public Dictionary <string, RepoRegistration> ReadRegistry() { Dictionary <string, RepoRegistration> allRepos = new Dictionary <string, RepoRegistration>(StringComparer.OrdinalIgnoreCase); using (Stream stream = this.fileSystem.OpenFileStream( Path.Combine(this.registryParentFolderPath, RegistryName), FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read, callFlushFileBuffers: false)) { using (StreamReader reader = new StreamReader(stream)) { string versionString = reader.ReadLine(); int version; if (!int.TryParse(versionString, out version) || version > RegistryVersion) { if (versionString != null) { EventMetadata metadata = new EventMetadata(); metadata.Add("Area", EtwArea); metadata.Add("OnDiskVersion", versionString); metadata.Add("ExpectedVersion", versionString); this.tracer.RelatedError(metadata, "ReadRegistry: Unsupported version"); } return(allRepos); } while (!reader.EndOfStream) { string entry = reader.ReadLine(); if (entry.Length > 0) { try { RepoRegistration registration = RepoRegistration.FromJson(entry); string errorMessage; string normalizedEnlistmentRootPath = registration.EnlistmentRoot; if (this.fileSystem.TryGetNormalizedPath(registration.EnlistmentRoot, out normalizedEnlistmentRootPath, out errorMessage)) { if (!normalizedEnlistmentRootPath.Equals(registration.EnlistmentRoot, StringComparison.OrdinalIgnoreCase)) { EventMetadata metadata = new EventMetadata(); metadata.Add("registration.EnlistmentRoot", registration.EnlistmentRoot); metadata.Add(nameof(normalizedEnlistmentRootPath), normalizedEnlistmentRootPath); metadata.Add(TracingConstants.MessageKey.InfoMessage, $"{nameof(this.ReadRegistry)}: Mapping registered enlistment root to final path"); this.tracer.RelatedEvent(EventLevel.Informational, $"{nameof(this.ReadRegistry)}_NormalizedPathMapping", metadata); } } else { EventMetadata metadata = new EventMetadata(); metadata.Add("registration.EnlistmentRoot", registration.EnlistmentRoot); metadata.Add("NormalizedEnlistmentRootPath", normalizedEnlistmentRootPath); metadata.Add("ErrorMessage", errorMessage); this.tracer.RelatedWarning(metadata, $"{nameof(this.ReadRegistry)}: Failed to get normalized path name for registed enlistment root"); } if (normalizedEnlistmentRootPath != null) { allRepos[normalizedEnlistmentRootPath] = registration; } } catch (Exception e) { EventMetadata metadata = new EventMetadata(); metadata.Add("Area", EtwArea); metadata.Add("entry", entry); metadata.Add("Exception", e.ToString()); this.tracer.RelatedError(metadata, "ReadRegistry: Failed to read entry"); } } } } } return(allRepos); }