override public Task PersistTransactions(PartitionChange change) { if (this.acceptChange) { return(base.PersistTransactions(change)); } return(Task.FromException(new Exception("Network error"))); }
virtual async public Task PersistTransactions(PartitionChange partitionChange) { if (partitionChange.PartitionId != this.Id) { var message = $"Got wrong PartitionChange {partitionChange.PartitionId} data in ServiceFabricPersistentCollector {this.Id}"; this.healthStore.WriteError(message); throw new InvalidOperationException(message); } foreach (var transactionToApply in partitionChange.Transactions) { var deserializedData = messageConverter.Deserialize <NotifyTransactionAppliedEvent>(transactionToApply.Data); using (var tx = this.stateManager.CreateTransaction()) { // Find which Dictionary is this change for. foreach (var change in deserializedData.Changes) { // assume all collections are dictionary. var dictName = change.CollectionName; var eventArgsType = change.EventArgs.GetType(); if (eventArgsType.GetGenericArguments().Length != 2) { var msg = $"Dictionary : {dictName} : Got an eventArgs {transactionToApply.Data} with less than 2 GenericArguments."; this.healthStore.WriteError(msg); throw new InvalidOperationException(msg); } var keyType = eventArgsType.GetGenericArguments()[0]; var valueType = eventArgsType.GetGenericArguments()[1]; await this.ApplyEventToDictionary(tx, keyType, valueType, dictName, change.EventArgs); } await tx.CommitAsync(); } } }
virtual public Task PersistTransactions(PartitionChange change) { this.changes.Add(change); return(Task.CompletedTask); }