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);
            }
        }
Ejemplo n.º 2
0
 public void TestInvalidReplicationScope_WithoutTransaction()
 {
     Assert.That(() =>
     {
         using (var scope = new DatabaseScope())
         {
             using (var replicationScope = new ReplicationScope())
             {
             }
         }
     }, Throws.Exception.TypeOf <InvalidOperationException>());
 }
Ejemplo n.º 3
0
        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);
        }