private void LogCurrentSegmentAssignment()
        {
            if (!log.IsDebugEnabled)
            {
                return;
            }

            var sb    = new StringBuilder("Current segment assignments are: ");
            var stats = new Dictionary <NodeEndpoint, NodeEndpointStats>();

            var groupByAssignment       = Segments.GroupBy(x => x.AssignedEndpoint ?? new NodeEndpoint());
            var groupByTentative        = Segments.GroupBy(x => x.InProcessOfMovingToEndpoint);
            var groupByTentativeBackups = Segments.SelectMany(x => x.PendingBackups).GroupBy(x => x);
            var groupByBackups          = Segments.SelectMany(x => x.Backups).GroupBy(x => x);

            foreach (var assignment in groupByAssignment)
            {
                stats[assignment.Key] = new NodeEndpointStats
                {
                    AssignmentCount = assignment.Count()
                };
            }

            NodeEndpointStats value;

            foreach (var backup in groupByBackups)
            {
                if (backup.Key == null)
                {
                    continue;
                }
                if (stats.TryGetValue(backup.Key, out value))
                {
                    value.BackupCount = backup.Count();
                }
            }

            foreach (var tentative in groupByTentative)
            {
                if (tentative.Key == null)
                {
                    continue;
                }
                if (stats.TryGetValue(tentative.Key, out value))
                {
                    value.TentativeCount = tentative.Count();
                }
            }

            foreach (var backup in groupByTentativeBackups)
            {
                if (backup.Key == null)
                {
                    continue;
                }
                if (stats.TryGetValue(backup.Key, out value))
                {
                    value.TentativeBackupCount = backup.Count();
                }
            }

            foreach (var segment in stats)
            {
                sb.Append("[")
                .Append(segment.Key.Sync.ToString() ?? "NULL")
                .Append(", assignments: ")
                .Append(segment.Value.AssignmentCount)
                .Append(", backups: ")
                .Append(segment.Value.BackupCount)
                .Append(", tentatives: ")
                .Append(segment.Value.TentativeCount)
                .Append(", tentative backups: ")
                .Append(segment.Value.TentativeBackupCount)
                .Append("], ");
            }
            log.Debug(sb.ToString());
        }