public MetadataDiff BuildDiff(string mark, int sequence) { MetadataDiff diff = new MetadataDiff(); foreach (var entry in operations) { // skips marks that don't need if (entry.Key >= sequence) { diff.AddOperation(entry.Value); } } return diff; }
public void MergeDiff(Metadata metadata, MetadataDiff diff) { foreach (string operation in diff.Operations) { string[] words = operation.Split(SEPARATOR); string methodName = words[0]; switch (methodName) { case ("OpenOnMetadata"): { string clientId = Helper.DeserializeObject<string>(words[1]); string filename = Helper.DeserializeObject<string>(words[2]); int sequence = Helper.DeserializeObject<int>(words[3]); metadata.OpenOnMetadata(clientId, filename, sequence); break; } case ("CloseOnMetadata"): { string clientId = Helper.DeserializeObject<string>(words[1]); string filename = Helper.DeserializeObject<string>(words[2]); int sequence = Helper.DeserializeObject<int>(words[3]); metadata.CloseOnMetadata(clientId, filename, sequence); break; } case ("CreateOnMetadata"): { string clientId = Helper.DeserializeObject<string>(words[1]); string filename = Helper.DeserializeObject<string>(words[2]); int nbDataServers = Helper.DeserializeObject<int>(words[3]); int readQuorum = Helper.DeserializeObject<int>(words[4]); int writeQuorum = Helper.DeserializeObject<int>(words[5]); int sequence = Helper.DeserializeObject<int>(words[6]); metadata.CreateOnMetadata(clientId, filename, nbDataServers, readQuorum, writeQuorum, sequence); break; } case ("SelectOnMetadata"): { string filename = Helper.DeserializeObject<string>(words[1]); string dataServerId = Helper.DeserializeObject<string>(words[2]); string localFilename = Helper.DeserializeObject<string>(words[3]); int sequence = Helper.DeserializeObject<int>(words[4]); metadata.SelectOnMetadata(filename, dataServerId, localFilename, sequence); break; } case ("DeleteOnMetadata"): { string filename = Helper.DeserializeObject<string>(words[1]); int sequence = Helper.DeserializeObject<int>(words[2]); metadata.DeleteOnMetadata(filename, sequence); break; } case ("DataServerOnMetadata"): { string dataServerId = Helper.DeserializeObject<string>(words[1]); string location = Helper.DeserializeObject<string>(words[2]); int sequence = Helper.DeserializeObject<int>(words[3]); metadata.DataServerOnMetadata(dataServerId, location, sequence); break; } case ("MigrateFileOnMetadata"): { string filename = Helper.DeserializeObject<string>(words[1]); string oldDataServerId = Helper.DeserializeObject<string>(words[2]); string newDataServerId = Helper.DeserializeObject<string>(words[3]); string oldLocalFilename = Helper.DeserializeObject<string>(words[4]); string newLocalFilename = Helper.DeserializeObject<string>(words[5]); int sequence = Helper.DeserializeObject<int>(words[6]); metadata.MigrateFileOnMetadata(filename, oldDataServerId, newDataServerId, oldLocalFilename, newLocalFilename, sequence); break; } default: { throw new Exception("METHOD CALL NOT SERIALIZABLE: " + methodName); } } } }