예제 #1
0
            public static GarbageCollected Read(BinaryReader reader)
            {
                var result = new GarbageCollected();

                result.Generation = Utilities.Read7BitEncodedInt(reader);
                result.FunctionId = Utilities.Read7BitEncodedInt(reader);
                result.TimeStamp  = Utilities.Read7BitEncodedInt64(reader);
                return(result);
            }
예제 #2
0
        public GarbageCollected Heartbeat(string dataServerId, Heartbeat heartbeat)
        {
            if (fail)
            {
                throw new ProcessFailedException(id);
            }
            if (ImNoMaster())
            {
                throw new NotTheMasterException(id, master);
            }

            //Console.WriteLine("HEARTBEAT FROM " + dataServerId);

            if (dataServers.Contains(dataServerId))
            {
                GarbageCollected toDelete = new GarbageCollected();

                // update data server weight
                dataServers.Touch(dataServerId, heartbeat.DataServerWeight);
                foreach (var entry in heartbeat.FileWeights)
                {
                    string localFilename = entry.Key;
                    Weight fileWeight    = entry.Value;

                    // garbage collection
                    if (!dataServers.ContainsFile(dataServerId, localFilename))
                    {
                        toDelete.Add(localFilename);
                    }
                    else
                    {
                        // update file weights
                        dataServers.UpdateFileWeight(dataServerId, localFilename, fileWeight);
                    }
                }

                // pending files if this data server returned
                if (dataServers.Failed(dataServerId))
                {
                    CheckPending(dataServerId);
                }

                return(toDelete);
            }

            return(null);
        }
예제 #3
0
        private void CompositionTargetOnRendering(object sender, EventArgs eventArgs)
        {
            var gcCount = GarbageCleanupCounter.CleanupCount;
            var isAlive = _gcCount == gcCount;

            try
            {
                if (isAlive == false)
                {
                    GarbageCollected?.Invoke(this, EventArgs.Empty);
                }
            }
            finally
            {
                _gcCount = gcCount;
            }
        }
예제 #4
0
        public void SendHeartbeat()
        {
            if (fail)
            {
                return;
            }
            if (freeze)
            {
                freezed.Enqueue(() => SendHeartbeat());
                return;
            }

            while (true)
            {
                try
                {
                    Heartbeat heartbeat = new Heartbeat(MyWeight(), new Dictionary <string, Weight>(weights));
                    //Console.WriteLine("HEARTBEAT TO " + master);
                    GarbageCollected toDelete = metadatas[master].Heartbeat(id, heartbeat);

                    foreach (string localFilename in toDelete)
                    {
                        Console.WriteLine("GARBAGE COLLECTOR = " + localFilename);
                        FileData ignoredFileData; files.TryRemove(localFilename, out ignoredFileData);
                        Weight   ignoredStats; weights.TryRemove(localFilename, out ignoredStats);
                    }

                    return;
                }
                catch (ProcessFailedException)
                {
                    RandomMaster();
                }
                catch (NotTheMasterException e)
                {
                    master = e.NewMaster;
                }
            }
        }
예제 #5
0
파일: Metadata.cs 프로젝트: jfloff/PADI
        public GarbageCollected Heartbeat(string dataServerId, Heartbeat heartbeat)
        {
            if (fail) throw new ProcessFailedException(id);
            if (ImNoMaster()) throw new NotTheMasterException(id, master);

            //Console.WriteLine("HEARTBEAT FROM " + dataServerId);

            if (dataServers.Contains(dataServerId))
            {
                GarbageCollected toDelete = new GarbageCollected();

                // update data server weight
                dataServers.Touch(dataServerId, heartbeat.DataServerWeight);
                foreach (var entry in heartbeat.FileWeights)
                {
                    string localFilename = entry.Key;
                    Weight fileWeight = entry.Value;

                    // garbage collection
                    if (!dataServers.ContainsFile(dataServerId, localFilename))
                    {
                        toDelete.Add(localFilename);
                    }
                    else
                    {
                        // update file weights
                        dataServers.UpdateFileWeight(dataServerId, localFilename, fileWeight);
                    }
                }

                // pending files if this data server returned
                if (dataServers.Failed(dataServerId))
                {
                    CheckPending(dataServerId);
                }

                return toDelete;
            }

            return null;
        }
예제 #6
0
			public static GarbageCollected Read(BinaryReader reader)
			{
				var result = new GarbageCollected();
				result.Generation = Utilities.Read7BitEncodedInt(reader);
				result.FunctionId = Utilities.Read7BitEncodedInt(reader);
				result.TimeStamp = Utilities.Read7BitEncodedInt64(reader);
				return result;
			}