예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
    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);
    }
예제 #4
0
		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;
		}
예제 #5
0
		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;
		}