private static ResponseMessage AddRemovableIndex(string path, string mnt_dir) { DirectoryInfo index_dir = new DirectoryInfo(StringFu.SanitizePath(path)); if (!index_dir.Exists) { ErrorResponse msg; msg = new ErrorResponse(); msg.ErrorMessage = "Adding removable index failed"; msg.Details = String.Format("'{0}' does not exist.", path); return(msg); } // Allow late loading of mount dir ? mnt_dir = StringFu.SanitizePath(mnt_dir); if (!Directory.Exists(mnt_dir)) { ErrorResponse msg; msg = new ErrorResponse(); msg.ErrorMessage = "Adding removable index failed"; msg.Details = String.Format("Mount directory '{0}' does not exist.", mnt_dir); return(msg); } if (removable_queryables.ContainsKey(path)) { ErrorResponse msg; msg = new ErrorResponse(); msg.ErrorMessage = "Adding removable index failed"; msg.Details = String.Format("'{0}' already added.", path); return(msg); } Queryable removable_queryable = null; try { iqueryable_lock.AcquireWriterLock(System.Threading.Timeout.Infinite); removable_queryable = StaticQueryable.LoadRemovableQueryable(index_dir, mnt_dir); } finally { iqueryable_lock.ReleaseWriterLock(); } if (removable_queryable == null) { return(new ErrorResponse("Adding removable index failed")); } iqueryable_to_queryable [removable_queryable.IQueryable] = removable_queryable; removable_queryables [path] = removable_queryable; RemovableIndexResponse resp = new RemovableIndexResponse(); resp.Source = removable_queryable.Name; Log.Info("Adding removable index '{0}' from {1}", resp.Source, path); return(resp); }
private static ResponseMessage RemoveRemovableIndex(string path, string mnt_dir) { if (!removable_queryables.ContainsKey(path)) { ErrorResponse msg; msg = new ErrorResponse(); msg.ErrorMessage = "Removing removable-index failed"; msg.Details = String.Format("'{0}' was not added.", path); return(msg); } Queryable removable_queryable = removable_queryables [path]; // Assert if (removable_queryable == null || !(removable_queryable.IQueryable is StaticQueryable)) { ErrorResponse msg = new ErrorResponse("Removing removable-index failed"); return(msg); } StaticQueryable static_queryable = (StaticQueryable)removable_queryable.IQueryable; if (static_queryable.RemovableMountDir != mnt_dir) { ErrorResponse msg; msg = new ErrorResponse(); msg.ErrorMessage = "Removing removable-index failed"; msg.Details = String.Format("No index mounted at {0}.", mnt_dir); return(msg); } static_queryable.Close(); removable_queryables.Remove(path); try { iqueryable_lock.AcquireWriterLock(System.Threading.Timeout.Infinite); iqueryable_to_queryable [removable_queryable.IQueryable] = null; iqueryable_to_queryable.Remove(removable_queryable.IQueryable); } finally { iqueryable_lock.ReleaseWriterLock(); } RemovableIndexResponse resp = new RemovableIndexResponse(); resp.Source = removable_queryable.Name; Log.Info("Removed removable-index '{0}' at {1}", removable_queryable.Name, path); return(resp); }
private static void UnmountRemovableIndex(string index_dir, string mnt_dir) { Console.WriteLine("Unloading removable index from '{0}' for '{1}'", index_dir, mnt_dir); RemovableIndexRequest req = new RemovableIndexRequest(); req.Mount = false; req.IndexDir = Path.IsPathRooted(index_dir) ? index_dir : Path.GetFullPath(index_dir); req.MountDir = Path.IsPathRooted(mnt_dir) ? mnt_dir : Path.GetFullPath(mnt_dir); ResponseMessage resp; try { resp = req.Send(); } catch (ResponseMessageException ex) { Log.Error("Error in unloading index: {0}", ex.ToString()); return; } RemovableIndexResponse res = (RemovableIndexResponse)resp; Console.WriteLine("Successfully unloaded '{0}'@{1} from {2}", res.Source, mnt_dir, index_dir); }
private static ResponseMessage RemoveRemovableIndex (string path, string mnt_dir) { if (! removable_queryables.ContainsKey (path)) { ErrorResponse msg; msg = new ErrorResponse (); msg.ErrorMessage = "Removing removable-index failed"; msg.Details = String.Format ("'{0}' was not added.", path); return msg; } Queryable removable_queryable = removable_queryables [path]; // Assert if (removable_queryable == null || ! (removable_queryable.IQueryable is StaticQueryable)) { ErrorResponse msg = new ErrorResponse ("Removing removable-index failed"); return msg; } StaticQueryable static_queryable = (StaticQueryable) removable_queryable.IQueryable; if (static_queryable.RemovableMountDir != mnt_dir) { ErrorResponse msg; msg = new ErrorResponse (); msg.ErrorMessage = "Removing removable-index failed"; msg.Details = String.Format ("No index mounted at {0}.", mnt_dir); return msg; } static_queryable.Close (); removable_queryables.Remove (path); try { iqueryable_lock.AcquireWriterLock (System.Threading.Timeout.Infinite); iqueryable_to_queryable [removable_queryable.IQueryable] = null; iqueryable_to_queryable.Remove (removable_queryable.IQueryable); } finally { iqueryable_lock.ReleaseWriterLock (); } RemovableIndexResponse resp = new RemovableIndexResponse (); resp.Source = removable_queryable.Name; Log.Info ("Removed removable-index '{0}' at {1}", removable_queryable.Name, path); return resp; }
private static ResponseMessage AddRemovableIndex (string path, string mnt_dir) { DirectoryInfo index_dir = new DirectoryInfo (StringFu.SanitizePath (path)); if (! index_dir.Exists) { ErrorResponse msg; msg = new ErrorResponse (); msg.ErrorMessage = "Adding removable index failed"; msg.Details = String.Format ("'{0}' does not exist.", path); return msg; } // Allow late loading of mount dir ? mnt_dir = StringFu.SanitizePath (mnt_dir); if (! Directory.Exists (mnt_dir)) { ErrorResponse msg; msg = new ErrorResponse (); msg.ErrorMessage = "Adding removable index failed"; msg.Details = String.Format ("Mount directory '{0}' does not exist.", mnt_dir); return msg; } if (removable_queryables.ContainsKey (path)) { ErrorResponse msg; msg = new ErrorResponse (); msg.ErrorMessage = "Adding removable index failed"; msg.Details = String.Format ("'{0}' already added.", path); return msg; } Queryable removable_queryable = null; try { iqueryable_lock.AcquireWriterLock (System.Threading.Timeout.Infinite); removable_queryable = StaticQueryable.LoadRemovableQueryable (index_dir, mnt_dir); } finally { iqueryable_lock.ReleaseWriterLock (); } if (removable_queryable == null) return new ErrorResponse ("Adding removable index failed"); iqueryable_to_queryable [removable_queryable.IQueryable] = removable_queryable; removable_queryables [path] = removable_queryable; RemovableIndexResponse resp = new RemovableIndexResponse (); resp.Source = removable_queryable.Name; Log.Info ("Adding removable index '{0}' from {1}", resp.Source, path); return resp; }