Example #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);
        }