Exemplo n.º 1
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);
        }