private bool DeleteInstanceInternal(IComparable instanceId, bool replicate, long evictionVersion) { Requires.Argument("instanceId", instanceId).NotNull(); StatefulServiceExecutionContext executionContext = StatefulServiceExecutionContext.Current as StatefulServiceExecutionContext; if (executionContext == null || executionContext.Partition == null) { throw new InvalidOperationException("Program instance cannot be obtained outside context of a partition. Please ensure that StatefulServiceReplicaT.Invoke is called."); } StatefulProgramInstance instance = null; ItemCollection <IComparable, StatefulProgramInstance> instances; using (this.instanceManager.GetInstances(LockPermission.Write, out instances)) { if (instances.Contains(instanceId)) { instance = (StatefulProgramInstance)instances[instanceId]; if (evictionVersion != -2 && !instance.CanEvict(evictionVersion)) { return(false); } instances.Remove(instanceId); ((IDisposable)instance).Dispose(); } } if (instance != null) { if (replicate) { Replicable <StatefulProgramInstance> replicable = new Replicable <StatefulProgramInstance>(instance.Id.ToString(), instance); ReplicationScope replicationScope = new ReplicationScope(new Replicable[] { replicable }, ReplicationOperationType.Evict); replicationScope.ReplicateAsync().ContinueWith( task => { ReplicationResult result = task.IsFaulted ? ReplicationResult.Failed : task.Result; if (result != ReplicationResult.Success) { AppTrace.TraceMsg(TraceLogEventType.Warning, "StatefulServiceReplicaT.DeleteInstanceInternal", "Replication call to dispose the instance with id {0} failed.", instance.Id); } }, TaskContinuationOptions.ExecuteSynchronously); } return(true); } else { return(false); } }
public void TestInvalidReplicationScope_WithoutTransaction() { Assert.That(() => { using (var scope = new DatabaseScope()) { using (var replicationScope = new ReplicationScope()) { } } }, Throws.Exception.TypeOf <InvalidOperationException>()); }
public ColumnFamilySchema ToPbSchema() { var schema = new ColumnFamilySchema { Name = ByteString.CopyFrom(Name) }; schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("VERSIONS"), Second = ByteString.CopyFromUtf8(MaxVersions.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("TTl"), Second = ByteString.CopyFromUtf8(TTL.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("MIN_VERSIONS"), Second = ByteString.CopyFromUtf8(MinVersion.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("KEEP_DELETED_CELLS"), Second = ByteString.CopyFromUtf8(KeepDeletedCells.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("BLOCKSIZE"), Second = ByteString.CopyFromUtf8(BlockSize.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("COMPRESSION"), Second = ByteString.CopyFromUtf8(Compression.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("BLOCKCACHE"), Second = ByteString.CopyFromUtf8(IsBlockCache.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("BLOOMFILTER"), Second = ByteString.CopyFromUtf8(BloomFilter.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("REPLICATION_SCOPE"), Second = ByteString.CopyFromUtf8(ReplicationScope.ToString()) }); schema.Attributes.Add(new BytesBytesPair { First = ByteString.CopyFromUtf8("DATA_BLOCK_ENCODING"), Second = ByteString.CopyFromUtf8(DataBlockEncoding.ToString()) }); return(schema); }