Statistics
| Branch: | Revision:

root / trunk / Pithos.Core / InMemStatusChecker.cs @ 126f90b3

History | View | Annotate | Download (6.1 kB)

1 eeee29e3 Panagiotis Kanavos
using System;
2 b5061ac8 Panagiotis Kanavos
using System.Collections.Concurrent;
3 eeee29e3 Panagiotis Kanavos
using System.Collections.Generic;
4 eeee29e3 Panagiotis Kanavos
using System.ComponentModel.Composition;
5 eeee29e3 Panagiotis Kanavos
using System.Diagnostics.Contracts;
6 b5061ac8 Panagiotis Kanavos
using System.Linq;
7 3c43ec9b Panagiotis Kanavos
using System.Threading;
8 eeee29e3 Panagiotis Kanavos
using Pithos.Interfaces;
9 5ce54458 Panagiotis Kanavos
using Pithos.Network;
10 eeee29e3 Panagiotis Kanavos
11 eeee29e3 Panagiotis Kanavos
namespace Pithos.Core
12 eeee29e3 Panagiotis Kanavos
{
13 eeee29e3 Panagiotis Kanavos
    //[Export(typeof(IStatusChecker)),Export(typeof(IStatusKeeper))]
14 eeee29e3 Panagiotis Kanavos
    public class InMemStatusChecker:IStatusChecker,IStatusKeeper
15 eeee29e3 Panagiotis Kanavos
    {
16 eeee29e3 Panagiotis Kanavos
        [Import]
17 eeee29e3 Panagiotis Kanavos
        public IPithosSettings Settings { get; set; }
18 eeee29e3 Panagiotis Kanavos
19 eeee29e3 Panagiotis Kanavos
        private readonly string[] _states = {"Normal", "Modified", "Conflict","Synch"};
20 eeee29e3 Panagiotis Kanavos
21 b5061ac8 Panagiotis Kanavos
        ConcurrentDictionary<string, FileOverlayStatus> _overlayCache = new ConcurrentDictionary<string, FileOverlayStatus>();
22 b5061ac8 Panagiotis Kanavos
        ConcurrentDictionary<string, FileStatus> _statusCache = new ConcurrentDictionary<string, FileStatus>();
23 b5061ac8 Panagiotis Kanavos
        ConcurrentDictionary<string, string> _checksums = new ConcurrentDictionary<string, string>();
24 eeee29e3 Panagiotis Kanavos
25 eeee29e3 Panagiotis Kanavos
        public FileOverlayStatus GetFileOverlayStatus(string path)
26 eeee29e3 Panagiotis Kanavos
        {
27 eeee29e3 Panagiotis Kanavos
            if (!_overlayCache.ContainsKey(path))
28 b5061ac8 Panagiotis Kanavos
                return FileOverlayStatus.Unversioned;
29 eeee29e3 Panagiotis Kanavos
30 eeee29e3 Panagiotis Kanavos
            var pithosPath = Settings.PithosPath;
31 eeee29e3 Panagiotis Kanavos
            if (path.StartsWith(pithosPath,true,null))
32 eeee29e3 Panagiotis Kanavos
            {
33 eeee29e3 Panagiotis Kanavos
                var status = _overlayCache[path];
34 eeee29e3 Panagiotis Kanavos
                return status;
35 eeee29e3 Panagiotis Kanavos
            }
36 b5061ac8 Panagiotis Kanavos
            return FileOverlayStatus.Unversioned;
37 b5061ac8 Panagiotis Kanavos
        }
38 b5061ac8 Panagiotis Kanavos
39 0af3141d Panagiotis Kanavos
        public void StoreUnversionedFiles(IEnumerable<FileInfo> paths)
40 b5061ac8 Panagiotis Kanavos
        {
41 b5061ac8 Panagiotis Kanavos
42 b5061ac8 Panagiotis Kanavos
            var newFiles = (from file in paths
43 b5061ac8 Panagiotis Kanavos
                            where !_overlayCache.ContainsKey(file)
44 b5061ac8 Panagiotis Kanavos
                            select new {
45 b5061ac8 Panagiotis Kanavos
                                           FilePath = file,
46 b5061ac8 Panagiotis Kanavos
                                           OverlayStatus = FileOverlayStatus.Unversioned,
47 b5061ac8 Panagiotis Kanavos
                                           FileStatus = FileStatus.Created,
48 9c4346c9 Panagiotis Kanavos
                                           Checksum = Signature.CalculateMD5(file)
49 b5061ac8 Panagiotis Kanavos
                                       });
50 b5061ac8 Panagiotis Kanavos
            ConcurrentBag<string> files = new ConcurrentBag<string>();           
51 b5061ac8 Panagiotis Kanavos
            newFiles.ForAll(state =>
52 b5061ac8 Panagiotis Kanavos
                                {
53 b5061ac8 Panagiotis Kanavos
                                    _overlayCache[state.FilePath] = state.OverlayStatus;
54 b5061ac8 Panagiotis Kanavos
                                    _statusCache[state.FilePath] = state.FileStatus;
55 b5061ac8 Panagiotis Kanavos
                                    _checksums[state.FilePath] = state.Checksum;
56 b5061ac8 Panagiotis Kanavos
                                    files.Add(state.FilePath);
57 b5061ac8 Panagiotis Kanavos
                                });
58 b5061ac8 Panagiotis Kanavos
            return files.GetConsumingEnumerable();
59 eeee29e3 Panagiotis Kanavos
        }
60 eeee29e3 Panagiotis Kanavos
61 0eea575a Panagiotis Kanavos
        public void Stop()
62 0eea575a Panagiotis Kanavos
        {
63 0eea575a Panagiotis Kanavos
            
64 0eea575a Panagiotis Kanavos
        }
65 0eea575a Panagiotis Kanavos
66 5bcf6d70 Panagiotis Kanavos
67 5bcf6d70 Panagiotis Kanavos
        private PithosStatus _pithosStatus = PithosStatus.InSynch;
68 5bcf6d70 Panagiotis Kanavos
        public void SetPithosStatus(PithosStatus status)
69 5bcf6d70 Panagiotis Kanavos
        {
70 5bcf6d70 Panagiotis Kanavos
            _pithosStatus = status;
71 5bcf6d70 Panagiotis Kanavos
        }
72 5bcf6d70 Panagiotis Kanavos
73 eeee29e3 Panagiotis Kanavos
        public PithosStatus GetPithosStatus()
74 eeee29e3 Panagiotis Kanavos
        {
75 5bcf6d70 Panagiotis Kanavos
            return _pithosStatus;
76 eeee29e3 Panagiotis Kanavos
        }
77 eeee29e3 Panagiotis Kanavos
78 283809f3 Panagiotis Kanavos
    public void SetStatus(string path, Action<FileState> setter)
79 283809f3 Panagiotis Kanavos
        {
80 283809f3 Panagiotis Kanavos
            throw new NotImplementedException();
81 283809f3 Panagiotis Kanavos
        }
82 283809f3 Panagiotis Kanavos
83 5ce54458 Panagiotis Kanavos
        ConcurrentDictionary<string, NetworkOperation> _networkState = new ConcurrentDictionary<string, NetworkOperation>();
84 283809f3 Panagiotis Kanavos
85 283809f3 Panagiotis Kanavos
    
86 5ce54458 Panagiotis Kanavos
        public void SetNetworkState(string path, NetworkOperation operation)
87 283809f3 Panagiotis Kanavos
        {
88 5ce54458 Panagiotis Kanavos
            _networkState[path.ToLower()] = operation;
89 283809f3 Panagiotis Kanavos
            //Removing may fail so we store the "None" value anyway
90 5ce54458 Panagiotis Kanavos
            if (operation == NetworkOperation.None)
91 283809f3 Panagiotis Kanavos
            {
92 5ce54458 Panagiotis Kanavos
                NetworkOperation oldOperation;
93 5ce54458 Panagiotis Kanavos
                _networkState.TryRemove(path, out oldOperation);
94 283809f3 Panagiotis Kanavos
            }
95 283809f3 Panagiotis Kanavos
        }
96 283809f3 Panagiotis Kanavos
97 5ce54458 Panagiotis Kanavos
        public NetworkOperation GetNetworkState(string path)
98 283809f3 Panagiotis Kanavos
        {
99 5ce54458 Panagiotis Kanavos
            NetworkOperation operation;
100 5ce54458 Panagiotis Kanavos
            if (_networkState.TryGetValue(path, out operation))
101 5ce54458 Panagiotis Kanavos
                return operation;
102 5ce54458 Panagiotis Kanavos
            return NetworkOperation.None;
103 283809f3 Panagiotis Kanavos
        }
104 283809f3 Panagiotis Kanavos
105 3c43ec9b Panagiotis Kanavos
        public void StartProcessing(CancellationToken token)
106 3c43ec9b Panagiotis Kanavos
        {
107 3c43ec9b Panagiotis Kanavos
            
108 3c43ec9b Panagiotis Kanavos
        }
109 3c43ec9b Panagiotis Kanavos
110 9c4346c9 Panagiotis Kanavos
        public string BlockHash { get; set; }
111 9c4346c9 Panagiotis Kanavos
112 5ce54458 Panagiotis Kanavos
        public int BlockSize { get; set; }
113 5ce54458 Panagiotis Kanavos
        
114 5ce54458 Panagiotis Kanavos
115 eeee29e3 Panagiotis Kanavos
        public void SetFileOverlayStatus(string path, FileOverlayStatus overlayStatus)
116 eeee29e3 Panagiotis Kanavos
        {
117 eeee29e3 Panagiotis Kanavos
            _overlayCache[path] = overlayStatus;
118 eeee29e3 Panagiotis Kanavos
        }
119 eeee29e3 Panagiotis Kanavos
120 eeee29e3 Panagiotis Kanavos
        public void RemoveFileOverlayStatus(string path)
121 eeee29e3 Panagiotis Kanavos
        {
122 b5061ac8 Panagiotis Kanavos
            FileOverlayStatus value;
123 b5061ac8 Panagiotis Kanavos
            _overlayCache.TryRemove(path, out value);
124 eeee29e3 Panagiotis Kanavos
        }
125 eeee29e3 Panagiotis Kanavos
126 eeee29e3 Panagiotis Kanavos
        public void RenameFileOverlayStatus(string oldPath, string newPath)
127 eeee29e3 Panagiotis Kanavos
        {
128 eeee29e3 Panagiotis Kanavos
            var status=_overlayCache[oldPath];
129 b5061ac8 Panagiotis Kanavos
            _overlayCache[newPath] = status;
130 b5061ac8 Panagiotis Kanavos
            FileOverlayStatus value;
131 b5061ac8 Panagiotis Kanavos
            _overlayCache.TryRemove(oldPath,out value);
132 eeee29e3 Panagiotis Kanavos
        }
133 eeee29e3 Panagiotis Kanavos
134 eeee29e3 Panagiotis Kanavos
        public void SetFileStatus(string path, FileStatus status)
135 eeee29e3 Panagiotis Kanavos
        {
136 eeee29e3 Panagiotis Kanavos
            _statusCache[path] = status;
137 eeee29e3 Panagiotis Kanavos
        }
138 eeee29e3 Panagiotis Kanavos
139 283809f3 Panagiotis Kanavos
        public void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus)
140 283809f3 Panagiotis Kanavos
        {
141 283809f3 Panagiotis Kanavos
            if (String.IsNullOrWhiteSpace(path))
142 283809f3 Panagiotis Kanavos
                throw new ArgumentNullException("path","path can't be empty");
143 283809f3 Panagiotis Kanavos
            _statusCache[path] = fileStatus;
144 283809f3 Panagiotis Kanavos
            _overlayCache[path] = overlayStatus;
145 283809f3 Panagiotis Kanavos
        }
146 283809f3 Panagiotis Kanavos
147 283809f3 Panagiotis Kanavos
        public void StoreInfo(string path, ObjectInfo objectInfo)
148 283809f3 Panagiotis Kanavos
        {
149 283809f3 Panagiotis Kanavos
            if (String.IsNullOrWhiteSpace(path))
150 283809f3 Panagiotis Kanavos
                throw new ArgumentNullException("path", "path can't be empty");
151 283809f3 Panagiotis Kanavos
            if (objectInfo == null)
152 283809f3 Panagiotis Kanavos
                throw new ArgumentNullException("objectInfo", "objectInfo can't be empty");
153 283809f3 Panagiotis Kanavos
154 283809f3 Panagiotis Kanavos
            _statusCache[path] = FileStatus.Unchanged;
155 283809f3 Panagiotis Kanavos
            _overlayCache[path] = FileOverlayStatus.Normal;
156 283809f3 Panagiotis Kanavos
            _checksums[path] = objectInfo.Hash;
157 283809f3 Panagiotis Kanavos
158 283809f3 Panagiotis Kanavos
159 283809f3 Panagiotis Kanavos
        }
160 283809f3 Panagiotis Kanavos
161 283809f3 Panagiotis Kanavos
        public T GetStatus<T>(string path, Func<FileState, T> getter, T defaultValue)
162 283809f3 Panagiotis Kanavos
        {
163 283809f3 Panagiotis Kanavos
            throw new NotImplementedException();
164 283809f3 Panagiotis Kanavos
        }
165 283809f3 Panagiotis Kanavos
166 eeee29e3 Panagiotis Kanavos
        public FileStatus GetFileStatus(string path)
167 eeee29e3 Panagiotis Kanavos
        {
168 eeee29e3 Panagiotis Kanavos
            if (!_statusCache.ContainsKey(path))
169 eeee29e3 Panagiotis Kanavos
                return FileStatus.Missing;
170 eeee29e3 Panagiotis Kanavos
            return _statusCache[path];
171 eeee29e3 Panagiotis Kanavos
        }
172 eeee29e3 Panagiotis Kanavos
173 eeee29e3 Panagiotis Kanavos
        public void ClearFileStatus(string path)
174 eeee29e3 Panagiotis Kanavos
        {
175 b5061ac8 Panagiotis Kanavos
            FileStatus value;
176 b5061ac8 Panagiotis Kanavos
            _statusCache.TryRemove(path,out value);
177 eeee29e3 Panagiotis Kanavos
        }
178 eeee29e3 Panagiotis Kanavos
179 eeee29e3 Panagiotis Kanavos
        public void UpdateFileChecksum(string path, string checksum)
180 eeee29e3 Panagiotis Kanavos
        {
181 eeee29e3 Panagiotis Kanavos
            _checksums[path] = checksum;
182 eeee29e3 Panagiotis Kanavos
        }
183 eeee29e3 Panagiotis Kanavos
    }
184 eeee29e3 Panagiotis Kanavos
}