public override void execute(MetaDataServer md) { if ((WriteQuorum > NumberOfDataServers) || (ReadQuorum > NumberOfDataServers)) { throw new CreateFileException("Invalid quorums values in create " + Filename); } if (md.FileMetadata.ContainsKey(Filename)) { throw new CreateFileException("#MDS.create - The file " + Filename + " already exists "); } // List<ServerObjectWrapper> newFileDataServers = getFirstServers(md, NumberOfDataServers); List<ServerObjectWrapper> newFileDataServers = md.getSortedServers(NumberOfDataServers); FileMetadata newFileMetadata = new FileMetadata(Filename, NumberOfDataServers, ReadQuorum, WriteQuorum, newFileDataServers); md.FileMetadata.Add(Filename, newFileMetadata); md.addMetadataLock(Filename, new ManualResetEvent(false)); md.getMigratingFiles().Add(Filename, new List<Tuple<string, string>>()); Console.WriteLine("#MDS: Created " + Filename); md.makeCheckpoint(); Result = md.FileMetadata[Filename]; }
private Boolean canRemove(MetaDataServer md) { FileMetadata metadata = md.FileMetadata[Filename]; int numActualServers = metadata.FileServers.Count; int numMigratingServers = md.getMigratingFiles()[Filename].Count; int quorumMax = Math.Max(metadata.WriteQuorum, metadata.ReadQuorum); int maxMigrating = metadata.FileServers.Count - quorumMax - numMigratingServers; Console.WriteLine("canMigrate [ numActualServers: " + numActualServers + ", numMigratingServers: " + numMigratingServers + ", quorumMax: " + quorumMax + ", maxMigrating: " + maxMigrating + "] - can? " + (maxMigrating > 0)); return maxMigrating > 0; }