This is an automated email from the ASF dual-hosted git repository.

krisden pushed a commit to branch branch_9_0
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9_0 by this push:
     new 92f2928  SOLR-16040: Fix split packages in hdfs module
92f2928 is described below

commit 92f292868285909cb04a3a049cdeac08b24f6c5b
Author: Kevin Risden <[email protected]>
AuthorDate: Tue Feb 22 13:41:34 2022 -0500

    SOLR-16040: Fix split packages in hdfs module
---
 gradle/documentation/render-javadoc.gradle         | 13 ---------
 solr/CHANGES.txt                                   |  2 ++
 .../org/apache/solr/core/SolrResourceLoader.java   |  2 +-
 .../org/apache/solr/update/TransactionLog.java     | 12 ++++----
 .../src/java/org/apache/solr/update/UpdateLog.java | 25 ++++++++---------
 .../solr/{core => hdfs}/HdfsDirectoryFactory.java  | 29 ++++++++++++--------
 .../backup/repository/HdfsBackupRepository.java    |  9 +++---
 .../backup/repository}/package-info.java           |  4 +--
 .../{index/hdfs => hdfs/index}/CheckHdfsIndex.java |  8 +++---
 .../{index/hdfs => hdfs/index}/package-info.java   |  2 +-
 .../apache/solr/{store => }/hdfs/package-info.java |  4 +--
 .../snapshots/SolrSnapshotsTool.java               |  4 ++-
 .../hdfs => hdfs/snapshots}/package-info.java      |  4 +--
 .../{store/hdfs => hdfs/store}/HdfsDirectory.java  |  4 +--
 .../{store/hdfs => hdfs/store}/HdfsFileWriter.java |  2 +-
 .../hdfs => hdfs/store}/HdfsLocalityReporter.java  |  2 +-
 .../hdfs => hdfs/store}/HdfsLockFactory.java       |  2 +-
 .../{ => hdfs}/store/blockcache/BlockCache.java    |  2 +-
 .../{ => hdfs}/store/blockcache/BlockCacheKey.java |  2 +-
 .../store/blockcache/BlockCacheLocation.java       |  2 +-
 .../store/blockcache/BlockDirectory.java           |  4 +--
 .../store/blockcache/BlockDirectoryCache.java      |  4 +--
 .../{ => hdfs}/store/blockcache/BlockLocks.java    |  2 +-
 .../{ => hdfs}/store/blockcache/BufferStore.java   |  2 +-
 .../solr/{ => hdfs}/store/blockcache/Cache.java    |  2 +-
 .../store/blockcache/CachedIndexOutput.java        |  2 +-
 .../store/blockcache/CustomBufferedIndexInput.java |  2 +-
 .../solr/{ => hdfs}/store/blockcache/Metrics.java  |  2 +-
 .../blockcache/ReusedBufferedIndexOutput.java      |  2 +-
 .../solr/{ => hdfs}/store/blockcache/Store.java    |  2 +-
 .../{ => hdfs}/store/blockcache/package-info.java  |  2 +-
 .../{store/hdfs => hdfs/store}/package-info.java   |  2 +-
 .../solr/{ => hdfs}/update/HdfsTransactionLog.java | 11 +++++---
 .../solr/{ => hdfs}/update/HdfsUpdateLog.java      |  9 ++++--
 .../{index/hdfs => hdfs/update}/package-info.java  |  4 +--
 .../util/HdfsRecoverLeaseFileSystemUtils.java}     |  9 ++++--
 .../org/apache/solr/{ => hdfs}/util/HdfsUtil.java  |  2 +-
 .../{store/hdfs => hdfs/util}/package-info.java    |  4 +--
 solr/modules/hdfs/src/test-files/core-site.xml     |  4 +--
 .../datanode/fsdataset/impl/BlockPoolSlice.java    |  2 +-
 .../{core => hdfs}/HdfsDirectoryFactoryTest.java   |  6 ++--
 .../HdfsBackupRepositoryIntegrationTest.java       |  7 +++--
 .../repository/HdfsBackupRepositoryTest.java       |  6 ++--
 .../cloud}/DisableKeyStoresFactory.java            |  2 +-
 .../cloud}/HdfsBasicDistributedZk2Test.java        |  2 +-
 .../cloud}/HdfsBasicDistributedZkTest.java         |  2 +-
 .../cloud}/HdfsChaosMonkeyNothingIsSafeTest.java   |  5 ++--
 .../cloud}/HdfsChaosMonkeySafeLeaderTest.java      |  8 +++---
 .../cloud/HdfsCollectionsApiTest.java}             |  4 +--
 .../hdfs => hdfs/cloud}/HdfsFakeGroupMapping.java  |  2 +-
 .../cloud/HdfsNameNodeFailoverTest.java}           |  6 ++--
 .../hdfs => hdfs/cloud}/HdfsRecoverLeaseTest.java  | 32 ++++++++++++++--------
 .../hdfs => hdfs/cloud}/HdfsRecoveryZkTest.java    |  2 +-
 .../cloud}/HdfsRestartWhileUpdatingTest.java       |  5 ++--
 .../hdfs => hdfs/cloud}/HdfsSyncSliceTest.java     |  2 +-
 .../{cloud/hdfs => hdfs/cloud}/HdfsTestUtil.java   |  8 +++---
 .../hdfs => hdfs/cloud}/HdfsThreadLeakTest.java    |  2 +-
 .../HdfsTlogReplayBufferedWhileIndexingTest.java   |  2 +-
 .../cloud}/HdfsUnloadDistributedZkTest.java        |  2 +-
 .../cloud}/HdfsWriteToMultipleCollectionsTest.java | 12 ++++----
 .../cloud/MoveReplicaHdfsFailoverTest.java}        |  6 ++--
 .../cloud/MoveReplicaHdfsTest.java}                |  6 ++--
 .../SharedFileSystemAutoReplicaFailoverTest.java}  |  9 +++---
 .../{cloud/hdfs => hdfs/cloud}/StressHdfsTest.java |  2 +-
 .../HdfsCloudIncrementalBackupTest.java            |  7 +++--
 .../HdfsCollectionsApiDistributedZkTest.java}      |  8 ++++--
 .../collections/TestHdfsCloudBackupRestore.java    |  9 +++---
 .../handler/TestHdfsBackupRestoreCore.java         | 10 +++++--
 .../hdfs => hdfs/index}/CheckHdfsIndexTest.java    |  6 ++--
 .../solr/{ => hdfs}/search/TestRecoveryHdfs.java   |  6 ++--
 .../hdfs => hdfs/store}/HdfsDirectoryTest.java     |  4 +--
 .../hdfs => hdfs/store}/HdfsLockFactoryTest.java   |  4 +--
 .../store/blockcache/BlockCacheTest.java           |  2 +-
 .../store/blockcache/BlockDirectoryTest.java       |  2 +-
 .../store/blockcache/BufferStoreTest.java          |  2 +-
 .../solr/{ => hdfs}/update/TestHdfsUpdateLog.java  |  7 +++--
 solr/server/scripts/cloud-scripts/snapshotscli.sh  |  4 +--
 .../pages/index-location-format.adoc               |  2 +-
 .../deployment-guide/pages/backup-restore.adoc     |  2 +-
 .../pages/major-changes-in-solr-9.adoc             |  2 ++
 ...bstractCollectionsAPIDistributedZkTestBase.java |  2 +-
 81 files changed, 230 insertions(+), 196 deletions(-)

diff --git a/gradle/documentation/render-javadoc.gradle 
b/gradle/documentation/render-javadoc.gradle
index b111cdc..c56f609 100644
--- a/gradle/documentation/render-javadoc.gradle
+++ b/gradle/documentation/render-javadoc.gradle
@@ -163,19 +163,6 @@ configure(project(":solr:test-framework")) {
   }
 }
 
-configure(project(":solr:modules:hdfs")) {
-  project.tasks.withType(RenderJavadocTask) {
-    // TODO: clean up split packages
-    javadocMissingIgnore = [
-        "org.apache.solr.core",
-        "org.apache.solr.core.backup.repository",
-        "org.apache.solr.core.snapshots",
-        "org.apache.solr.update",
-        "org.apache.solr.util"
-    ]
-  }
-}
-
 // Fix for Java 11 Javadoc tool that cannot handle split packages between 
modules correctly.
 // (by removing all the packages which are part of lucene-core)
 // See: 
https://issues.apache.org/jira/browse/LUCENE-8738?focusedCommentId=16818106&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16818106
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 5103f2f..ed50b36 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -52,6 +52,8 @@ New Features
 
 * SOLR-14660: Move HDFS support to a new HDFS module (Istvan Farkas, Kevin 
Risden)
 
+* SOLR-16040: Fix split packages in hdfs module (Kevin Risden)
+
 * SOLR-13989: Move Hadoop Authentication support to a new hadoop-auth module 
(Kevin Risden)
 
 * SOLR-15904: Move SQL support to new sql module (Kevin Risden)
diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java 
b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
index 5693307..ab3f5e7 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -88,7 +88,7 @@ public class SolrResourceLoader implements ResourceLoader, 
Closeable, SolrClassL
       "", "analysis.", "schema.", "handler.", "handler.tagger.", "search.", 
"update.", "core.", "response.", "request.",
       "update.processor.", "util.", "spelling.", "handler.component.",
       "spelling.suggest.", "spelling.suggest.fst.", "rest.schema.analysis.", 
"security.", "handler.admin.",
-      "security.jwt.", "security.hadoop.", "handler.sql."
+      "security.jwt.", "security.hadoop.", "handler.sql.", "hdfs.", 
"hdfs.update."
   };
   private static final Charset UTF_8 = StandardCharsets.UTF_8;
   public static final String SOLR_ALLOW_UNSAFE_RESOURCELOADING_PARAM = 
"solr.allow.unsafe.resourceloading";
diff --git a/solr/core/src/java/org/apache/solr/update/TransactionLog.java 
b/solr/core/src/java/org/apache/solr/update/TransactionLog.java
index 353bfe0..84fa839 100644
--- a/solr/core/src/java/org/apache/solr/update/TransactionLog.java
+++ b/solr/core/src/java/org/apache/solr/update/TransactionLog.java
@@ -75,18 +75,18 @@ public class TransactionLog implements Closeable {
   Path tlog;
   FileChannel channel;
   OutputStream os;
-  FastOutputStream fos;    // all accesses to this stream should be 
synchronized on "this" (The TransactionLog)
+  protected FastOutputStream fos;    // all accesses to this stream should be 
synchronized on "this" (The TransactionLog)
   int numRecords;
-  boolean isBuffer;
+  public boolean isBuffer;
 
   protected volatile boolean deleteOnClose = true;  // we can delete old tlogs 
since they are currently only used for real-time-get (and in the future, 
recovery)
 
-  AtomicInteger refcount = new AtomicInteger(1);
-  Map<String, Integer> globalStringMap = new HashMap<>();
-  List<String> globalStringList = new ArrayList<>();
+  protected AtomicInteger refcount = new AtomicInteger(1);
+  protected Map<String, Integer> globalStringMap = new HashMap<>();
+  protected List<String> globalStringList = new ArrayList<>();
 
   // write a BytesRef as a byte array
-  static final JavaBinCodec.ObjectResolver resolver = new 
JavaBinCodec.ObjectResolver() {
+  protected static final JavaBinCodec.ObjectResolver resolver = new 
JavaBinCodec.ObjectResolver() {
     @Override
     public Object resolve(Object o, JavaBinCodec codec) throws IOException {
       if (o instanceof BytesRef) {
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java 
b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index 73ac3d0..04bed04 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -179,7 +179,7 @@ public class UpdateLog implements PluginInfoInitialized, 
SolrMetricProducer {
     }
   }
 
-  long id = -1;
+  protected long id = -1;
   protected volatile State state = State.ACTIVE;
 
   protected TransactionLog bufferTlog;
@@ -238,9 +238,9 @@ public class UpdateLog implements PluginInfoInitialized, 
SolrMetricProducer {
 
   protected SyncLevel defaultSyncLevel = SyncLevel.FLUSH;
 
-  volatile UpdateHandler uhandler;    // a core reload can change this 
reference!
+  protected volatile UpdateHandler uhandler;    // a core reload can change 
this reference!
   protected volatile boolean cancelApplyBufferUpdate;
-  List<Long> startingVersions;
+  protected List<Long> startingVersions;
 
   // metrics
   protected Gauge<Integer> bufferedOpsGauge;
@@ -723,7 +723,7 @@ public class UpdateLog implements PluginInfoInitialized, 
SolrMetricProducer {
   }
 
 
-  void trackDeleteByQuery(String q, long version) {
+  protected void trackDeleteByQuery(String q, long version) {
     version = Math.abs(version);
     DBQ dbq = new DBQ();
     dbq.q = q;
@@ -1393,16 +1393,16 @@ public class UpdateLog implements 
PluginInfoInitialized, SolrMetricProducer {
   }
 
 
-  static class Update {
-    TransactionLog log;
+  protected static class Update {
+    public TransactionLog log;
     long version;
     long previousVersion; // for in-place updates
-    long pointer;
+    public long pointer;
   }
 
-  static class DeleteUpdate {
-    long version;
-    byte[] id;
+  protected static class DeleteUpdate {
+    public long version;
+    public byte[] id;
 
     public DeleteUpdate(long version, byte[] id) {
       this.version = version;
@@ -1411,12 +1411,11 @@ public class UpdateLog implements 
PluginInfoInitialized, SolrMetricProducer {
   }
 
   public class RecentUpdates implements Closeable {
-
     final Deque<TransactionLog> logList;    // newest first
     List<List<Update>> updateList;
     HashMap<Long, Update> updates;
-    List<Update> deleteByQueryList;
-    List<DeleteUpdate> deleteList;
+    public List<Update> deleteByQueryList;
+    public List<DeleteUpdate> deleteList;
     Set<Long> bufferUpdates = new HashSet<>();
 
     public RecentUpdates(Deque<TransactionLog> logList) {
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/core/HdfsDirectoryFactory.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/HdfsDirectoryFactory.java
similarity index 96%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/HdfsDirectoryFactory.java
index c4cef6d..9d32e5f 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/HdfsDirectoryFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.core;
+package org.apache.solr.hdfs;
 
 import static 
org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION;
 
@@ -54,20 +54,25 @@ import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.CachingDirectoryFactory;
+import org.apache.solr.core.CoreDescriptor;
+import org.apache.solr.core.DirectoryFactory;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrPaths;
+import org.apache.solr.hdfs.store.HdfsDirectory;
+import org.apache.solr.hdfs.store.HdfsLocalityReporter;
+import org.apache.solr.hdfs.store.HdfsLockFactory;
+import org.apache.solr.hdfs.store.blockcache.BlockCache;
+import org.apache.solr.hdfs.store.blockcache.BlockDirectory;
+import org.apache.solr.hdfs.store.blockcache.BlockDirectoryCache;
+import org.apache.solr.hdfs.store.blockcache.BufferStore;
+import org.apache.solr.hdfs.store.blockcache.Cache;
+import org.apache.solr.hdfs.store.blockcache.Metrics;
+import org.apache.solr.hdfs.update.HdfsUpdateLog;
+import org.apache.solr.hdfs.util.HdfsUtil;
 import org.apache.solr.metrics.SolrMetricProducer;
 import org.apache.solr.metrics.SolrMetricsContext;
-import org.apache.solr.store.blockcache.BlockCache;
-import org.apache.solr.store.blockcache.BlockDirectory;
-import org.apache.solr.store.blockcache.BlockDirectoryCache;
-import org.apache.solr.store.blockcache.BufferStore;
-import org.apache.solr.store.blockcache.Cache;
-import org.apache.solr.store.blockcache.Metrics;
-import org.apache.solr.store.hdfs.HdfsDirectory;
-import org.apache.solr.store.hdfs.HdfsLocalityReporter;
-import org.apache.solr.store.hdfs.HdfsLockFactory;
-import org.apache.solr.update.HdfsUpdateLog;
 import org.apache.solr.update.UpdateLog;
-import org.apache.solr.util.HdfsUtil;
 import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/HdfsBackupRepository.java
similarity index 96%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/HdfsBackupRepository.java
index 3df5038..a4bee9d 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/HdfsBackupRepository.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.solr.core.backup.repository;
+package org.apache.solr.hdfs.backup.repository;
 
 import com.google.common.base.Preconditions;
 import java.io.IOException;
@@ -39,9 +39,10 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.DirectoryFactory;
-import org.apache.solr.core.HdfsDirectoryFactory;
-import org.apache.solr.store.hdfs.HdfsDirectory;
-import org.apache.solr.store.hdfs.HdfsDirectory.HdfsIndexInput;
+import org.apache.solr.core.backup.repository.BackupRepository;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
+import org.apache.solr.hdfs.store.HdfsDirectory;
+import org.apache.solr.hdfs.store.HdfsDirectory.HdfsIndexInput;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/package-info.java
similarity index 89%
copy from 
solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
copy to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/package-info.java
index 3142414..a8f3fb2 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/backup/repository/package-info.java
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 
-/** An HDFS CheckIndex implementation. */
-package org.apache.solr.index.hdfs;
+/** An HDFS backup repository implementation. */
+package org.apache.solr.hdfs.backup.repository;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/CheckHdfsIndex.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/index/CheckHdfsIndex.java
similarity index 94%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/CheckHdfsIndex.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/index/CheckHdfsIndex.java
index 5ab5765..5f78619 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/CheckHdfsIndex.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/index/CheckHdfsIndex.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.index.hdfs;
+package org.apache.solr.hdfs.index;
 
 import java.io.IOException;
 import org.apache.hadoop.conf.Configuration;
@@ -22,9 +22,9 @@ import org.apache.hadoop.fs.Path;
 import org.apache.lucene.index.CheckIndex;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.SuppressForbidden;
-import org.apache.solr.core.HdfsDirectoryFactory;
-import org.apache.solr.store.hdfs.HdfsDirectory;
-import org.apache.solr.util.HdfsUtil;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
+import org.apache.solr.hdfs.store.HdfsDirectory;
+import org.apache.solr.hdfs.util.HdfsUtil;
 
 public class CheckHdfsIndex {
   public static void main(String[] args) throws IOException, 
InterruptedException {
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/index/package-info.java
similarity index 95%
copy from 
solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
copy to solr/modules/hdfs/src/java/org/apache/solr/hdfs/index/package-info.java
index 3142414..51de820 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/index/package-info.java
@@ -16,4 +16,4 @@
  */
 
 /** An HDFS CheckIndex implementation. */
-package org.apache.solr.index.hdfs;
+package org.apache.solr.hdfs.index;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/package-info.java
similarity index 91%
copy from 
solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java
copy to solr/modules/hdfs/src/java/org/apache/solr/hdfs/package-info.java
index d12f217..96f3d82 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/package-info.java
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 
-/** An HDFS Directory implementation. */
-package org.apache.solr.store.hdfs;
+/** HDFS implementation. */
+package org.apache.solr.hdfs;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/snapshots/SolrSnapshotsTool.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/snapshots/SolrSnapshotsTool.java
index 23a769c..8369e38 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/core/snapshots/SolrSnapshotsTool.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/snapshots/SolrSnapshotsTool.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.solr.core.snapshots;
+package org.apache.solr.hdfs.snapshots;
 
 import com.google.common.base.Preconditions;
 import java.io.Closeable;
@@ -54,7 +54,9 @@ import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.params.CollectionAdminParams;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.snapshots.CollectionSnapshotMetaData;
 import 
org.apache.solr.core.snapshots.CollectionSnapshotMetaData.CoreSnapshotMetaData;
+import org.apache.solr.core.snapshots.SolrSnapshotManager;
 import org.apache.solr.util.CLIO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/snapshots/package-info.java
similarity index 90%
copy from 
solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
copy to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/snapshots/package-info.java
index 3142414..20b68d6 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/snapshots/package-info.java
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 
-/** An HDFS CheckIndex implementation. */
-package org.apache.solr.index.hdfs;
+/** An HDFS snapshot implementation. */
+package org.apache.solr.hdfs.snapshots;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsDirectory.java
similarity index 98%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsDirectory.java
index 2eff10a..e89911c 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsDirectory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.hdfs;
+package org.apache.solr.hdfs.store;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
@@ -39,7 +39,7 @@ import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
 import org.apache.lucene.store.LockFactory;
-import org.apache.solr.store.blockcache.CustomBufferedIndexInput;
+import org.apache.solr.hdfs.store.blockcache.CustomBufferedIndexInput;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsFileWriter.java
similarity index 98%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsFileWriter.java
index 7a2500a..b03542b 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsFileWriter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.hdfs;
+package org.apache.solr.hdfs.store;
 
 import java.io.IOException;
 import java.io.OutputStream;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsLocalityReporter.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsLocalityReporter.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsLocalityReporter.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsLocalityReporter.java
index 1c0371e..3080817 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsLocalityReporter.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsLocalityReporter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.hdfs;
+package org.apache.solr.hdfs.store;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsLockFactory.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsLockFactory.java
index bf220e7..e461c6d 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/HdfsLockFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.hdfs;
+package org.apache.solr.hdfs.store;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCache.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCache.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCache.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCache.java
index 3ea8fb8..0b7a5f4 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCache.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCache.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.Caffeine;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCacheKey.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCacheKey.java
similarity index 97%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCacheKey.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCacheKey.java
index 2f2f25f..b8fa68c 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCacheKey.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCacheKey.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 /** @lucene.experimental */
 public class BlockCacheKey implements Cloneable {
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCacheLocation.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCacheLocation.java
similarity index 97%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCacheLocation.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCacheLocation.java
index 7ef4688..22ab1be 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockCacheLocation.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockCacheLocation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.solr.common.util.SuppressForbidden;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockDirectory.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockDirectory.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockDirectory.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockDirectory.java
index b149da7..f29cf30 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockDirectory.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockDirectory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -29,7 +29,7 @@ import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
 import org.apache.solr.core.ShutdownAwareDirectory;
-import org.apache.solr.store.hdfs.HdfsDirectory;
+import org.apache.solr.hdfs.store.HdfsDirectory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockDirectoryCache.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockDirectoryCache.java
similarity index 97%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockDirectoryCache.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockDirectoryCache.java
index b0aafa2..0581018 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockDirectoryCache.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockDirectoryCache.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import com.github.benmanes.caffeine.cache.Caffeine;
 import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.solr.store.blockcache.BlockCache.OnRelease;
+import org.apache.solr.hdfs.store.blockcache.BlockCache.OnRelease;
 
 /** @lucene.experimental */
 public class BlockDirectoryCache implements Cache {
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockLocks.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockLocks.java
similarity index 98%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockLocks.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockLocks.java
index 023bc74..e387d42 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BlockLocks.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BlockLocks.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.util.concurrent.atomic.AtomicLongArray;
 import org.apache.lucene.util.LongBitSet;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BufferStore.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BufferStore.java
similarity index 98%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BufferStore.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BufferStore.java
index 9c49164..25c205f 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/BufferStore.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/BufferStore.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Cache.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Cache.java
similarity index 97%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Cache.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Cache.java
index 0974bad..eeef8b7 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Cache.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Cache.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 /** @lucene.experimental */
 public interface Cache {
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/CachedIndexOutput.java
similarity index 98%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/CachedIndexOutput.java
index 9750e2b..a78f6c5 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/CachedIndexOutput.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.io.IOException;
 import org.apache.lucene.store.IndexOutput;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/CustomBufferedIndexInput.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/CustomBufferedIndexInput.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/CustomBufferedIndexInput.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/CustomBufferedIndexInput.java
index 752ebe3..a3b6356 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/CustomBufferedIndexInput.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/CustomBufferedIndexInput.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.io.EOFException;
 import java.io.IOException;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Metrics.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Metrics.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Metrics.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Metrics.java
index 9abdcb4..296ea06 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Metrics.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Metrics.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java
 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/ReusedBufferedIndexOutput.java
similarity index 99%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/ReusedBufferedIndexOutput.java
index 5637da1..f6a7203 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/ReusedBufferedIndexOutput.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.io.IOException;
 import org.apache.lucene.store.IndexOutput;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Store.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Store.java
similarity index 95%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Store.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Store.java
index 98e5f6a..6a1a3f5 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/Store.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/Store.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 /** @lucene.experimental */
 public interface Store {
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/package-info.java
similarity index 94%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/package-info.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/package-info.java
index 14c7957..e68e933 100644
--- 
a/solr/modules/hdfs/src/java/org/apache/solr/store/blockcache/package-info.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/blockcache/package-info.java
@@ -16,4 +16,4 @@
  */
 
 /** An HDFS blockcache implementation. */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/package-info.java
similarity index 95%
copy from 
solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java
copy to solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/package-info.java
index d12f217..dea7244 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/store/package-info.java
@@ -16,4 +16,4 @@
  */
 
 /** An HDFS Directory implementation. */
-package org.apache.solr.store.hdfs;
+package org.apache.solr.hdfs.store;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/update/HdfsTransactionLog.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsTransactionLog.java
similarity index 98%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/update/HdfsTransactionLog.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsTransactionLog.java
index 4896f36..dd11e4b 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/update/HdfsTransactionLog.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsTransactionLog.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.update;
+package org.apache.solr.hdfs.update;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
@@ -35,8 +35,11 @@ import org.apache.solr.common.util.FastInputStream;
 import org.apache.solr.common.util.FastOutputStream;
 import org.apache.solr.common.util.JavaBinCodec;
 import org.apache.solr.common.util.ObjectReleaseTracker;
-import org.apache.solr.util.FSHDFSUtils;
-import org.apache.solr.util.FSHDFSUtils.CallerInfo;
+import org.apache.solr.hdfs.util.HdfsRecoverLeaseFileSystemUtils;
+import org.apache.solr.hdfs.util.HdfsRecoverLeaseFileSystemUtils.CallerInfo;
+import org.apache.solr.update.CommitUpdateCommand;
+import org.apache.solr.update.TransactionLog;
+import org.apache.solr.update.UpdateLog;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -86,7 +89,7 @@ public class HdfsTransactionLog extends TransactionLog {
       this.tlogFile = tlogFile;
 
       if (fs.exists(tlogFile) && openExisting) {
-        FSHDFSUtils.recoverFileLease(
+        HdfsRecoverLeaseFileSystemUtils.recoverFileLease(
             fs,
             tlogFile,
             fs.getConf(),
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/update/HdfsUpdateLog.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsUpdateLog.java
similarity index 97%
rename from solr/modules/hdfs/src/java/org/apache/solr/update/HdfsUpdateLog.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsUpdateLog.java
index 0ca2bb1..1ca680c 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/update/HdfsUpdateLog.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsUpdateLog.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.update;
+package org.apache.solr.hdfs.update;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -37,7 +37,12 @@ import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrInfoBean;
-import org.apache.solr.util.HdfsUtil;
+import org.apache.solr.hdfs.util.HdfsUtil;
+import org.apache.solr.update.CommitUpdateCommand;
+import org.apache.solr.update.TransactionLog;
+import org.apache.solr.update.UpdateHandler;
+import org.apache.solr.update.UpdateLog;
+import org.apache.solr.update.VersionInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/package-info.java
similarity index 89%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/package-info.java
index 3142414..461612b 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/index/hdfs/package-info.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/package-info.java
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 
-/** An HDFS CheckIndex implementation. */
-package org.apache.solr.index.hdfs;
+/** An HDFS update log and transaction log implementation. */
+package org.apache.solr.hdfs.update;
diff --git a/solr/modules/hdfs/src/java/org/apache/solr/util/FSHDFSUtils.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/HdfsRecoverLeaseFileSystemUtils.java
similarity index 96%
rename from solr/modules/hdfs/src/java/org/apache/solr/util/FSHDFSUtils.java
rename to 
solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/HdfsRecoverLeaseFileSystemUtils.java
index 57856f6..9cae569 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/util/FSHDFSUtils.java
+++ 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/HdfsRecoverLeaseFileSystemUtils.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.util;
+package org.apache.solr.hdfs.util;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -29,8 +29,11 @@ import org.apache.hadoop.hdfs.DistributedFileSystem;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/** Borrowed from Apache HBase to recover an HDFS lease. */
-public class FSHDFSUtils {
+/**
+ * Borrowed from Apache HBase to recover an HDFS lease.
+ * 
https://github.com/apache/hbase/blob/master/hbase-asyncfs/src/main/java/org/apache/hadoop/hbase/util/RecoverLeaseFSUtils.java
+ */
+public class HdfsRecoverLeaseFileSystemUtils {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   // internal, for tests
diff --git a/solr/modules/hdfs/src/java/org/apache/solr/util/HdfsUtil.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/HdfsUtil.java
similarity index 98%
rename from solr/modules/hdfs/src/java/org/apache/solr/util/HdfsUtil.java
rename to solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/HdfsUtil.java
index c4dc593..f930284 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/util/HdfsUtil.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/HdfsUtil.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.util;
+package org.apache.solr.hdfs.util;
 
 import java.io.File;
 import org.apache.hadoop.conf.Configuration;
diff --git 
a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java 
b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/package-info.java
similarity index 91%
rename from 
solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java
rename to solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/package-info.java
index d12f217..fec2056 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/store/hdfs/package-info.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/util/package-info.java
@@ -15,5 +15,5 @@
  * limitations under the License.
  */
 
-/** An HDFS Directory implementation. */
-package org.apache.solr.store.hdfs;
+/** An HDFS util implementation. */
+package org.apache.solr.hdfs.util;
diff --git a/solr/modules/hdfs/src/test-files/core-site.xml 
b/solr/modules/hdfs/src/test-files/core-site.xml
index fcfdfa9..cfc6d13 100644
--- a/solr/modules/hdfs/src/test-files/core-site.xml
+++ b/solr/modules/hdfs/src/test-files/core-site.xml
@@ -18,12 +18,12 @@
 <configuration>
   <property>
     <name>hadoop.security.group.mapping</name>
-    <value>org.apache.solr.cloud.hdfs.HdfsFakeGroupMapping</value>
+    <value>org.apache.solr.hdfs.cloud.HdfsFakeGroupMapping</value>
   </property>
 
   <!-- SSL KeyStore reloading causes thread leaks - HADOOP-16524 introduced in 
Hadoop 3.3.1 -->
   <property>
     <name>hadoop.ssl.keystores.factory.class</name>
-    <value>org.apache.solr.cloud.hdfs.DisableKeyStoresFactory</value>
+    <value>org.apache.solr.hdfs.cloud.DisableKeyStoresFactory</value>
   </property>
 </configuration>
diff --git 
a/solr/modules/hdfs/src/test/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
 
b/solr/modules/hdfs/src/test/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
index d502203..6f2d142 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java
@@ -69,7 +69,7 @@ import org.apache.hadoop.util.DiskChecker;
 import org.apache.hadoop.util.DiskChecker.DiskErrorException;
 import org.apache.hadoop.util.ShutdownHookManager;
 import org.apache.hadoop.util.Timer;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 
 import com.google.common.annotations.VisibleForTesting;
 
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/core/HdfsDirectoryFactoryTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/HdfsDirectoryFactoryTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/core/HdfsDirectoryFactoryTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/HdfsDirectoryFactoryTest.java
index e523f19..88c58b1 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/core/HdfsDirectoryFactoryTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/HdfsDirectoryFactoryTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.core;
+package org.apache.solr.hdfs;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -38,15 +38,15 @@ import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.DirectoryFactory.DirContext;
 import org.apache.solr.handler.SnapShooter;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
+import org.apache.solr.hdfs.store.HdfsLocalityReporter;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.apache.solr.metrics.MetricsMap;
 import org.apache.solr.metrics.SolrMetricManager;
 import org.apache.solr.metrics.SolrMetricsContext;
-import org.apache.solr.store.hdfs.HdfsLocalityReporter;
 import org.apache.solr.util.MockCoreContainer.MockCoreDescriptor;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/core/backup/repository/HdfsBackupRepositoryIntegrationTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/backup/repository/HdfsBackupRepositoryIntegrationTest.java
similarity index 95%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/core/backup/repository/HdfsBackupRepositoryIntegrationTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/backup/repository/HdfsBackupRepositoryIntegrationTest.java
index e7f27b9..9b3e77e 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/core/backup/repository/HdfsBackupRepositoryIntegrationTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/backup/repository/HdfsBackupRepositoryIntegrationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.solr.core.backup.repository;
+package org.apache.solr.hdfs.backup.repository;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -29,10 +29,11 @@ import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.hadoop.hdfs.protocol.HdfsConstants;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.cloud.api.collections.AbstractBackupRepositoryTest;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.HdfsDirectoryFactory;
+import org.apache.solr.core.backup.repository.BackupRepository;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/core/backup/repository/HdfsBackupRepositoryTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/backup/repository/HdfsBackupRepositoryTest.java
similarity index 96%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/core/backup/repository/HdfsBackupRepositoryTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/backup/repository/HdfsBackupRepositoryTest.java
index dbc124e..c188bb8 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/core/backup/repository/HdfsBackupRepositoryTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/backup/repository/HdfsBackupRepositoryTest.java
@@ -15,15 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.solr.core.backup.repository;
+package org.apache.solr.hdfs.backup.repository;
 
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
-import org.apache.solr.core.HdfsDirectoryFactory;
-import org.apache.solr.store.hdfs.HdfsDirectory;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
+import org.apache.solr.hdfs.store.HdfsDirectory;
 import org.junit.Test;
 
 public class HdfsBackupRepositoryTest {
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/DisableKeyStoresFactory.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/DisableKeyStoresFactory.java
similarity index 97%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/DisableKeyStoresFactory.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/DisableKeyStoresFactory.java
index e9c7a12..7e88a83 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/DisableKeyStoresFactory.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/DisableKeyStoresFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import java.io.IOException;
 import java.security.GeneralSecurityException;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsBasicDistributedZk2Test.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsBasicDistributedZk2Test.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsBasicDistributedZk2Test.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsBasicDistributedZk2Test.java
index 332e39a..dfab112 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsBasicDistributedZk2Test.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsBasicDistributedZk2Test.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsBasicDistributedZkTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsBasicDistributedZkTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsBasicDistributedZkTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsBasicDistributedZkTest.java
index a66b255..940817d 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsBasicDistributedZkTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsBasicDistributedZkTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsChaosMonkeyNothingIsSafeTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsChaosMonkeyNothingIsSafeTest.java
similarity index 94%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsChaosMonkeyNothingIsSafeTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsChaosMonkeyNothingIsSafeTest.java
index f5878ca..60331bc 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsChaosMonkeyNothingIsSafeTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsChaosMonkeyNothingIsSafeTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -25,6 +25,7 @@ import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.cloud.AbstractChaosMonkeyNothingIsSafeTestBase;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -66,7 +67,7 @@ public class HdfsChaosMonkeyNothingIsSafeTest extends 
AbstractChaosMonkeyNothing
     super.distribSetUp();
 
     // super class may hard code directory
-    useFactory("org.apache.solr.core.HdfsDirectoryFactory");
+    useFactory(HdfsDirectoryFactory.class.getCanonicalName());
   }
 
   @Override
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsChaosMonkeySafeLeaderTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsChaosMonkeySafeLeaderTest.java
similarity index 92%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsChaosMonkeySafeLeaderTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsChaosMonkeySafeLeaderTest.java
index c93f287..aa4dec9 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsChaosMonkeySafeLeaderTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsChaosMonkeySafeLeaderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -25,6 +25,7 @@ import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.cloud.AbstractChaosMonkeySafeLeaderTestBase;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -41,7 +42,6 @@ import org.junit.BeforeClass;
 @ThreadLeakLingering(
     linger = 1000) // Wait at least 1 second for Netty GlobalEventExecutor to 
shutdown
 public class HdfsChaosMonkeySafeLeaderTest extends 
AbstractChaosMonkeySafeLeaderTestBase {
-  private static final String DIRECTORY_FACTORY = 
"org.apache.solr.core.HdfsDirectoryFactory";
   private static MiniDFSCluster dfsCluster;
 
   @BeforeClass
@@ -67,7 +67,7 @@ public class HdfsChaosMonkeySafeLeaderTest extends 
AbstractChaosMonkeySafeLeader
     super.distribSetUp();
 
     // super class may hard code directory
-    useFactory("org.apache.solr.core.HdfsDirectoryFactory");
+    useFactory(HdfsDirectoryFactory.class.getCanonicalName());
   }
 
   @Override
@@ -76,6 +76,6 @@ public class HdfsChaosMonkeySafeLeaderTest extends 
AbstractChaosMonkeySafeLeader
   }
 
   protected String getDirectoryFactory() {
-    return DIRECTORY_FACTORY;
+    return HdfsDirectoryFactory.class.getCanonicalName();
   }
 }
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HDFSCollectionsAPITest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsCollectionsApiTest.java
similarity index 97%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HDFSCollectionsAPITest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsCollectionsApiTest.java
index ce89466..796f2ec 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HDFSCollectionsAPITest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsCollectionsApiTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -42,7 +42,7 @@ import org.junit.BeforeClass;
     })
 @ThreadLeakLingering(
     linger = 1000) // Wait at least 1 second for Netty GlobalEventExecutor to 
shutdown
-public class HDFSCollectionsAPITest extends SolrCloudTestCase {
+public class HdfsCollectionsApiTest extends SolrCloudTestCase {
 
   private static MiniDFSCluster dfsCluster;
 
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsFakeGroupMapping.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsFakeGroupMapping.java
similarity index 97%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsFakeGroupMapping.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsFakeGroupMapping.java
index 7ceb687..39a755f 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsFakeGroupMapping.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsFakeGroupMapping.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import java.util.Collections;
 import java.util.List;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsNNFailoverTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsNameNodeFailoverTest.java
similarity index 94%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsNNFailoverTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsNameNodeFailoverTest.java
index a4ce9b9..731cf88 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsNNFailoverTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsNameNodeFailoverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -39,7 +39,7 @@ import org.junit.Test;
     })
 @ThreadLeakLingering(
     linger = 1000) // Wait at least 1 second for Netty GlobalEventExecutor to 
shutdown
-public class HdfsNNFailoverTest extends AbstractBasicDistributedZkTestBase {
+public class HdfsNameNodeFailoverTest extends 
AbstractBasicDistributedZkTestBase {
   private static final String COLLECTION = "collection";
   private static MiniDFSCluster dfsCluster;
 
@@ -62,7 +62,7 @@ public class HdfsNNFailoverTest extends 
AbstractBasicDistributedZkTestBase {
     return HdfsTestUtil.getDataDir(dfsCluster, dataDir);
   }
 
-  public HdfsNNFailoverTest() {
+  public HdfsNameNodeFailoverTest() {
     super();
     sliceCount = 1;
     fixShardCount(TEST_NIGHTLY ? 7 : random().nextInt(2) + 1);
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRecoverLeaseTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRecoverLeaseTest.java
similarity index 86%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRecoverLeaseTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRecoverLeaseTest.java
index bf0673c..a41bc39 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRecoverLeaseTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRecoverLeaseTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -31,8 +31,8 @@ import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
-import org.apache.solr.util.FSHDFSUtils;
-import org.apache.solr.util.FSHDFSUtils.CallerInfo;
+import org.apache.solr.hdfs.util.HdfsRecoverLeaseFileSystemUtils;
+import org.apache.solr.hdfs.util.HdfsRecoverLeaseFileSystemUtils.CallerInfo;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -78,7 +78,8 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
 
   @Test
   public void testBasic() throws IOException {
-    long startRecoverLeaseSuccessCount = 
FSHDFSUtils.RECOVER_LEASE_SUCCESS_COUNT.get();
+    long startRecoverLeaseSuccessCount =
+        HdfsRecoverLeaseFileSystemUtils.RECOVER_LEASE_SUCCESS_COUNT.get();
 
     URI uri = dfsCluster.getURI();
     Path path = new Path(uri);
@@ -91,7 +92,7 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
     out.hflush();
     out.close();
 
-    FSHDFSUtils.recoverFileLease(
+    HdfsRecoverLeaseFileSystemUtils.recoverFileLease(
         fs1,
         testFile,
         conf,
@@ -102,7 +103,10 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
             return false;
           }
         });
-    assertEquals(0, FSHDFSUtils.RECOVER_LEASE_SUCCESS_COUNT.get() - 
startRecoverLeaseSuccessCount);
+    assertEquals(
+        0,
+        HdfsRecoverLeaseFileSystemUtils.RECOVER_LEASE_SUCCESS_COUNT.get()
+            - startRecoverLeaseSuccessCount);
 
     fs1.close();
 
@@ -123,7 +127,7 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
 
     FileSystem fs3 = FileSystem.get(path.toUri(), conf);
 
-    FSHDFSUtils.recoverFileLease(
+    HdfsRecoverLeaseFileSystemUtils.recoverFileLease(
         fs3,
         testFile2,
         conf,
@@ -134,7 +138,10 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
             return false;
           }
         });
-    assertEquals(1, FSHDFSUtils.RECOVER_LEASE_SUCCESS_COUNT.get() - 
startRecoverLeaseSuccessCount);
+    assertEquals(
+        1,
+        HdfsRecoverLeaseFileSystemUtils.RECOVER_LEASE_SUCCESS_COUNT.get()
+            - startRecoverLeaseSuccessCount);
 
     fs3.close();
     fs2.close();
@@ -142,7 +149,8 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
 
   @Test
   public void testMultiThreaded() throws Exception {
-    long startRecoverLeaseSuccessCount = 
FSHDFSUtils.RECOVER_LEASE_SUCCESS_COUNT.get();
+    long startRecoverLeaseSuccessCount =
+        HdfsRecoverLeaseFileSystemUtils.RECOVER_LEASE_SUCCESS_COUNT.get();
 
     final URI uri = dfsCluster.getURI();
     final Path path = new Path(uri);
@@ -207,7 +215,7 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
       public void run() {
         Path testFile = new Path(uri.toString() + "/file-" + id);
         try {
-          FSHDFSUtils.recoverFileLease(
+          HdfsRecoverLeaseFileSystemUtils.recoverFileLease(
               fs,
               testFile,
               conf,
@@ -259,6 +267,8 @@ public class HdfsRecoverLeaseTest extends SolrTestCaseJ4 {
     }
 
     assertEquals(
-        threadCount, FSHDFSUtils.RECOVER_LEASE_SUCCESS_COUNT.get() - 
startRecoverLeaseSuccessCount);
+        threadCount,
+        HdfsRecoverLeaseFileSystemUtils.RECOVER_LEASE_SUCCESS_COUNT.get()
+            - startRecoverLeaseSuccessCount);
   }
 }
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRecoveryZkTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRecoveryZkTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRecoveryZkTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRecoveryZkTest.java
index de8daa1..5ee2a0e 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRecoveryZkTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRecoveryZkTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRestartWhileUpdatingTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRestartWhileUpdatingTest.java
similarity index 94%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRestartWhileUpdatingTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRestartWhileUpdatingTest.java
index 23faa29..5a2fd14 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsRestartWhileUpdatingTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsRestartWhileUpdatingTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -24,6 +24,7 @@ import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.cloud.AbstractRestartWhileUpdatingTestBase;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -46,7 +47,7 @@ public class HdfsRestartWhileUpdatingTest extends 
AbstractRestartWhileUpdatingTe
     super();
 
     // The constructor runs after setupClass so reset the DirectoryFactory
-    useFactory("org.apache.solr.core.HdfsDirectoryFactory");
+    useFactory(HdfsDirectoryFactory.class.getCanonicalName());
   }
 
   @BeforeClass
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsSyncSliceTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsSyncSliceTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsSyncSliceTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsSyncSliceTest.java
index 18319f1..f9f7a66 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsSyncSliceTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsSyncSliceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsTestUtil.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsTestUtil.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsTestUtil.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsTestUtil.java
index 38cf0f1..91f9ca3 100644
--- a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsTestUtil.java
+++ b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsTestUtil.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import java.io.File;
 import java.lang.invoke.MethodHandles;
@@ -53,8 +53,8 @@ import org.apache.lucene.util.Constants;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.SuppressForbidden;
-import org.apache.solr.core.HdfsDirectoryFactory;
-import org.apache.solr.util.HdfsUtil;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
+import org.apache.solr.hdfs.util.HdfsUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -278,7 +278,7 @@ public class HdfsTestUtil {
       badTlogOutStream = badTlogOutStreamFs.create(hdfsDirPath);
     }
 
-    SolrTestCaseJ4.useFactory("org.apache.solr.core.HdfsDirectoryFactory");
+    SolrTestCaseJ4.useFactory(HdfsDirectoryFactory.class.getCanonicalName());
 
     return dfsCluster;
   }
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsThreadLeakTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsThreadLeakTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsThreadLeakTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsThreadLeakTest.java
index 658fcee..29ef43f 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsThreadLeakTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsThreadLeakTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsTlogReplayBufferedWhileIndexingTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsTlogReplayBufferedWhileIndexingTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsTlogReplayBufferedWhileIndexingTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsTlogReplayBufferedWhileIndexingTest.java
index 1d688c0..a047eae 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsTlogReplayBufferedWhileIndexingTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsTlogReplayBufferedWhileIndexingTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsUnloadDistributedZkTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsUnloadDistributedZkTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsUnloadDistributedZkTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsUnloadDistributedZkTest.java
index 6fb35a0..20f30a9 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsUnloadDistributedZkTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsUnloadDistributedZkTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsWriteToMultipleCollectionsTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsWriteToMultipleCollectionsTest.java
similarity index 95%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsWriteToMultipleCollectionsTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsWriteToMultipleCollectionsTest.java
index 18224af..3342da8 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/HdfsWriteToMultipleCollectionsTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/HdfsWriteToMultipleCollectionsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -41,13 +41,13 @@ import 
org.apache.solr.cloud.AbstractBasicDistributedZkTestBase;
 import org.apache.solr.cloud.StoppableIndexingThread;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.DirectoryFactory;
-import org.apache.solr.core.HdfsDirectoryFactory;
 import org.apache.solr.core.SolrCore;
+import org.apache.solr.hdfs.HdfsDirectoryFactory;
+import org.apache.solr.hdfs.store.blockcache.BlockCache;
+import org.apache.solr.hdfs.store.blockcache.BlockDirectory;
+import org.apache.solr.hdfs.store.blockcache.BlockDirectoryCache;
+import org.apache.solr.hdfs.store.blockcache.Cache;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
-import org.apache.solr.store.blockcache.BlockCache;
-import org.apache.solr.store.blockcache.BlockDirectory;
-import org.apache.solr.store.blockcache.BlockDirectoryCache;
-import org.apache.solr.store.blockcache.Cache;
 import org.apache.solr.util.RefCounted;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/MoveReplicaHDFSFailoverTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/MoveReplicaHdfsFailoverTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/MoveReplicaHDFSFailoverTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/MoveReplicaHdfsFailoverTest.java
index 6577d6d..a83708e 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/MoveReplicaHDFSFailoverTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/MoveReplicaHdfsFailoverTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.solr.cloud;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -28,7 +28,7 @@ import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.response.CollectionAdminResponse;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import org.apache.solr.cloud.SolrCloudTestCase;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.ClusterStateUtil;
 import org.apache.solr.common.cloud.DocCollection;
@@ -47,7 +47,7 @@ import org.junit.Test;
       BadHdfsThreadsFilter.class // hdfs currently leaks thread(s)
     })
 @Nightly // test is too long for non nightly
-public class MoveReplicaHDFSFailoverTest extends SolrCloudTestCase {
+public class MoveReplicaHdfsFailoverTest extends SolrCloudTestCase {
   private static MiniDFSCluster dfsCluster;
 
   @BeforeClass
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/MoveReplicaHDFSTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/MoveReplicaHdfsTest.java
similarity index 95%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/MoveReplicaHDFSTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/MoveReplicaHdfsTest.java
index bfd96ad..255ea33 100644
--- a/solr/modules/hdfs/src/test/org/apache/solr/cloud/MoveReplicaHDFSTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/MoveReplicaHdfsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -26,7 +26,7 @@ import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.lucene.util.TimeUnits;
 import org.apache.solr.SolrIgnoredThreadsFilter;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import org.apache.solr.cloud.AbstractMoveReplicaTestBase;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -43,7 +43,7 @@ import org.junit.Test;
     })
 @TimeoutSuite(millis = TimeUnits.HOUR)
 @AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/SOLR-13924";)
-public class MoveReplicaHDFSTest extends AbstractMoveReplicaTestBase {
+public class MoveReplicaHdfsTest extends AbstractMoveReplicaTestBase {
   private static MiniDFSCluster dfsCluster;
 
   @BeforeClass
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/SharedFileSystemAutoReplicaFailoverTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/SharedFileSystemAutoReplicaFailoverTest.java
index 317c017..bf9f303 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/SharedFileSystemAutoReplicaFailoverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -46,7 +46,8 @@ import 
org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest.Create;
 import org.apache.solr.client.solrj.response.CollectionAdminResponse;
 import org.apache.solr.client.solrj.response.QueryResponse;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
+import org.apache.solr.cloud.ChaosMonkey;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.ClusterState;
@@ -84,7 +85,7 @@ import org.slf4j.LoggerFactory;
 @LogLevel("org.apache.solr.cloud.*=DEBUG")
 @LuceneTestCase.BadApple(
     bugUrl = "https://issues.apache.org/jira/browse/SOLR-12028";) // added 
20-Jul-2018
-public class SharedFSAutoReplicaFailoverTest extends 
AbstractFullDistribZkTestBase {
+public class SharedFileSystemAutoReplicaFailoverTest extends 
AbstractFullDistribZkTestBase {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   private static final boolean DEBUG = true;
@@ -140,7 +141,7 @@ public class SharedFSAutoReplicaFailoverTest extends 
AbstractFullDistribZkTestBa
     return "solr.xml";
   }
 
-  public SharedFSAutoReplicaFailoverTest() {
+  public SharedFileSystemAutoReplicaFailoverTest() {
     completionService = new ExecutorCompletionService<>(executor);
     pending = new HashSet<>();
   }
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/StressHdfsTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/StressHdfsTest.java
similarity index 99%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/StressHdfsTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/StressHdfsTest.java
index 99b1dbe..60b02f0 100644
--- a/solr/modules/hdfs/src/test/org/apache/solr/cloud/hdfs/StressHdfsTest.java
+++ b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/StressHdfsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.hdfs;
+package org.apache.solr.hdfs.cloud;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/HdfsCloudIncrementalBackupTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/HdfsCloudIncrementalBackupTest.java
similarity index 96%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/HdfsCloudIncrementalBackupTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/HdfsCloudIncrementalBackupTest.java
index 4cbd70e..0180c2a 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/HdfsCloudIncrementalBackupTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/HdfsCloudIncrementalBackupTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.solr.cloud.api.collections;
+package org.apache.solr.hdfs.cloud.api.collections;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -30,8 +30,9 @@ import org.apache.hadoop.hdfs.protocol.HdfsConstants;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import org.apache.solr.cloud.api.collections.AbstractIncrementalBackupTest;
 import org.apache.solr.common.util.IOUtils;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -77,7 +78,7 @@ public class HdfsCloudIncrementalBackupTest extends 
AbstractIncrementalBackupTes
           + "    <repository name=\"trackingBackupRepository\" 
default=\"true\" class=\"org.apache.solr.core.TrackingBackupRepository\"> \n"
           + "      <str name=\"delegateRepoName\">hdfs</str>\n"
           + "    </repository>\n"
-          + "    <repository  name=\"hdfs\" 
class=\"org.apache.solr.core.backup.repository.HdfsBackupRepository\"> \n"
+          + "    <repository  name=\"hdfs\" 
class=\"org.apache.solr.hdfs.backup.repository.HdfsBackupRepository\"> \n"
           + "      <str 
name=\"location\">${solr.hdfs.default.backup.path}</str>\n"
           + "      <str name=\"solr.hdfs.home\">${solr.hdfs.home:}</str>\n"
           + "      <str 
name=\"solr.hdfs.confdir\">${solr.hdfs.confdir:}</str>\n"
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/HdfsCollectionsAPIDistributedZkTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/HdfsCollectionsApiDistributedZkTest.java
similarity index 89%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/HdfsCollectionsAPIDistributedZkTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/HdfsCollectionsApiDistributedZkTest.java
index f2ee6c8..f1996b6 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/HdfsCollectionsAPIDistributedZkTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/HdfsCollectionsApiDistributedZkTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.api.collections;
+package org.apache.solr.hdfs.cloud.api.collections;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -24,7 +24,8 @@ import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.lucene.util.TimeUnits;
 import org.apache.solr.SolrIgnoredThreadsFilter;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import 
org.apache.solr.cloud.api.collections.AbstractCollectionsAPIDistributedZkTestBase;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -39,7 +40,7 @@ import org.junit.BeforeClass;
       BadHdfsThreadsFilter.class // hdfs currently leaks thread(s)
     })
 @TimeoutSuite(millis = TimeUnits.HOUR)
-public class HdfsCollectionsAPIDistributedZkTest
+public class HdfsCollectionsApiDistributedZkTest
     extends AbstractCollectionsAPIDistributedZkTestBase {
   private static MiniDFSCluster dfsCluster;
 
@@ -57,6 +58,7 @@ public class HdfsCollectionsAPIDistributedZkTest
     }
   }
 
+  @Override
   protected String getConfigSet() {
     return "cloud-hdfs";
   }
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/TestHdfsCloudBackupRestore.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/TestHdfsCloudBackupRestore.java
similarity index 97%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/TestHdfsCloudBackupRestore.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/TestHdfsCloudBackupRestore.java
index a4badb9..e982af3 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/cloud/api/collections/TestHdfsCloudBackupRestore.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/cloud/api/collections/TestHdfsCloudBackupRestore.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.cloud.api.collections;
+package org.apache.solr.hdfs.cloud.api.collections;
 
 import static org.apache.solr.core.backup.BackupManager.CONFIG_STATE_DIR;
 import static 
org.apache.solr.core.backup.BackupManager.TRADITIONAL_BACKUP_PROPS_FILE;
@@ -43,13 +43,14 @@ import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.cloud.ZkConfigSetService;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import 
org.apache.solr.cloud.api.collections.AbstractCloudBackupRestoreTestCase;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.params.CollectionAdminParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.backup.BackupManager;
 import org.apache.solr.core.backup.BackupProperties;
-import org.apache.solr.core.backup.repository.HdfsBackupRepository;
+import org.apache.solr.hdfs.backup.repository.HdfsBackupRepository;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -96,7 +97,7 @@ public class TestHdfsCloudBackupRestore extends 
AbstractCloudBackupRestoreTestCa
           + "  </solrcloud>\n"
           + "  \n"
           + "  <backup>\n"
-          + "    <repository  name=\"hdfs\" 
class=\"org.apache.solr.core.backup.repository.HdfsBackupRepository\"> \n"
+          + "    <repository  name=\"hdfs\" 
class=\"org.apache.solr.hdfs.backup.repository.HdfsBackupRepository\"> \n"
           + "      <str 
name=\"location\">${solr.hdfs.default.backup.path}</str>\n"
           + "      <str name=\"solr.hdfs.home\">${solr.hdfs.home:}</str>\n"
           + "      <str 
name=\"solr.hdfs.confdir\">${solr.hdfs.confdir:}</str>\n"
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/handler/TestHdfsBackupRestoreCore.java
similarity index 97%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/handler/TestHdfsBackupRestoreCore.java
index f079ef3..447e52c 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/handler/TestHdfsBackupRestoreCore.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.handler;
+package org.apache.solr.hdfs.handler;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -42,7 +42,6 @@ import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.cloud.SolrCloudTestCase;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
@@ -51,6 +50,11 @@ import org.apache.solr.common.params.CoreAdminParams;
 import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
 import org.apache.solr.core.backup.BackupId;
 import org.apache.solr.core.backup.ShardBackupId;
+import org.apache.solr.handler.BackupRestoreUtils;
+import org.apache.solr.handler.BackupStatusChecker;
+import org.apache.solr.handler.ReplicationHandler;
+import org.apache.solr.handler.TestRestoreCoreUtil;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -97,7 +101,7 @@ public class TestHdfsBackupRestoreCore extends 
SolrCloudTestCase {
           + "  </solrcloud>\n"
           + "  \n"
           + "  <backup>\n"
-          + "    <repository  name=\"hdfs\" 
class=\"org.apache.solr.core.backup.repository.HdfsBackupRepository\"> \n"
+          + "    <repository  name=\"hdfs\" 
class=\"org.apache.solr.hdfs.backup.repository.HdfsBackupRepository\"> \n"
           + "      <str 
name=\"location\">${solr.hdfs.default.backup.path}</str>\n"
           + "      <str name=\"solr.hdfs.home\">${solr.hdfs.home:}</str>\n"
           + "      <str 
name=\"solr.hdfs.confdir\">${solr.hdfs.confdir:}</str>\n"
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/index/hdfs/CheckHdfsIndexTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/index/CheckHdfsIndexTest.java
similarity index 97%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/index/hdfs/CheckHdfsIndexTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/index/CheckHdfsIndexTest.java
index 13fce0f..327d7b8 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/index/hdfs/CheckHdfsIndexTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/index/CheckHdfsIndexTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.index.hdfs;
+package org.apache.solr.hdfs.index;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import java.io.IOException;
@@ -30,10 +30,10 @@ import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
+import org.apache.solr.hdfs.store.HdfsDirectory;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
-import org.apache.solr.store.hdfs.HdfsDirectory;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/search/TestRecoveryHdfs.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/search/TestRecoveryHdfs.java
similarity index 99%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/search/TestRecoveryHdfs.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/search/TestRecoveryHdfs.java
index 15999b4..af4a775 100644
--- a/solr/modules/hdfs/src/test/org/apache/solr/search/TestRecoveryHdfs.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/search/TestRecoveryHdfs.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.search;
+package org.apache.solr.hdfs.search;
 
 import static 
org.apache.solr.update.processor.DistributingUpdateProcessorFactory.DISTRIB_UPDATE_PARAM;
 
@@ -43,13 +43,13 @@ import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.TimeSource;
 import org.apache.solr.common.util.Utils;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
+import org.apache.solr.hdfs.update.HdfsUpdateLog;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.update.HdfsUpdateLog;
 import org.apache.solr.update.UpdateHandler;
 import org.apache.solr.update.UpdateLog;
 import 
org.apache.solr.update.processor.DistributedUpdateProcessor.DistribPhase;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/HdfsDirectoryTest.java
similarity index 99%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/HdfsDirectoryTest.java
index 3d024e6..6fd18a9 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/HdfsDirectoryTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.hdfs;
+package org.apache.solr.hdfs.store;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
@@ -34,7 +34,7 @@ import org.apache.lucene.store.IndexOutput;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.After;
 import org.junit.AfterClass;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/store/hdfs/HdfsLockFactoryTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/HdfsLockFactoryTest.java
similarity index 97%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/store/hdfs/HdfsLockFactoryTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/HdfsLockFactoryTest.java
index 13e5b08..5eb0e80 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/store/hdfs/HdfsLockFactoryTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/HdfsLockFactoryTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.hdfs;
+package org.apache.solr.hdfs.store;
 
 import com.carrotsearch.randomizedtesting.annotations.Nightly;
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@@ -27,7 +27,7 @@ import org.apache.lucene.store.LockObtainFailedException;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BlockCacheTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BlockCacheTest.java
similarity index 99%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BlockCacheTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BlockCacheTest.java
index c01e815..db9c4e5 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BlockCacheTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BlockCacheTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import com.github.benmanes.caffeine.cache.*;
 import java.util.Arrays;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BlockDirectoryTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BlockDirectoryTest.java
similarity index 99%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BlockDirectoryTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BlockDirectoryTest.java
index 00cc022..6928444 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BlockDirectoryTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BlockDirectoryTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import com.github.benmanes.caffeine.cache.Caffeine;
 import java.io.File;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BufferStoreTest.java
 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BufferStoreTest.java
similarity index 98%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BufferStoreTest.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BufferStoreTest.java
index 10ee342..6962e64 100644
--- 
a/solr/modules/hdfs/src/test/org/apache/solr/store/blockcache/BufferStoreTest.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/store/blockcache/BufferStoreTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.store.blockcache;
+package org.apache.solr.hdfs.store.blockcache;
 
 import java.math.BigDecimal;
 import java.util.Map;
diff --git 
a/solr/modules/hdfs/src/test/org/apache/solr/update/TestHdfsUpdateLog.java 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/update/TestHdfsUpdateLog.java
similarity index 95%
rename from 
solr/modules/hdfs/src/test/org/apache/solr/update/TestHdfsUpdateLog.java
rename to 
solr/modules/hdfs/src/test/org/apache/solr/hdfs/update/TestHdfsUpdateLog.java
index 8d88343..2409928 100644
--- a/solr/modules/hdfs/src/test/org/apache/solr/update/TestHdfsUpdateLog.java
+++ 
b/solr/modules/hdfs/src/test/org/apache/solr/hdfs/update/TestHdfsUpdateLog.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.solr.update;
+package org.apache.solr.hdfs.update;
 
 import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
 import java.io.IOException;
@@ -26,10 +26,13 @@ import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.cloud.hdfs.HdfsTestUtil;
 import org.apache.solr.common.util.IOUtils;
+import org.apache.solr.hdfs.cloud.HdfsTestUtil;
 import org.apache.solr.hdfs.util.BadHdfsThreadsFilter;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.update.DirectUpdateHandler2;
+import org.apache.solr.update.UpdateHandler;
+import org.apache.solr.update.UpdateLog;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/solr/server/scripts/cloud-scripts/snapshotscli.sh 
b/solr/server/scripts/cloud-scripts/snapshotscli.sh
index e5a26d6..16c5983 100755
--- a/solr/server/scripts/cloud-scripts/snapshotscli.sh
+++ b/solr/server/scripts/cloud-scripts/snapshotscli.sh
@@ -11,7 +11,7 @@ run_solr_snapshot_tool() {
     log4j_config="file:${scriptDir}/../../resources/log4j2-console.xml"
   fi
   PATH=${JAVA_HOME}/bin:${PATH} ${JVM} ${ZKCLI_JVM_FLAGS} 
-Dlog4j.configurationFile=${log4j_config} \
-  -classpath "${solrLibPath}" org.apache.solr.core.snapshots.SolrSnapshotsTool 
"$@" 2> /dev/null
+  -classpath "${solrLibPath}" org.apache.solr.hdfs.snapshots.SolrSnapshotsTool 
"$@" 2> /dev/null
 }
 
 usage() {
@@ -104,7 +104,7 @@ snapshotName="$2"
 copyListingDirPath=""
 distCpCmd="${SOLR_DISTCP_CMD:-hadoop distcp}"
 scriptDir=$(dirname "$0")
-solrLibPath="${SOLR_LIB_PATH:-${scriptDir}/../../solr-webapp/webapp/WEB-INF/lib/*:${scriptDir}/../../lib/ext/*}"
+solrLibPath="${SOLR_LIB_PATH:-${scriptDir}/../../solr-webapp/webapp/WEB-INF/lib/*:${scriptDir}/../../lib/ext/*:${scriptDir}/../../../modules/hdfs/lib/*}"
 
 case "${cmd}" in
   --create)
diff --git 
a/solr/solr-ref-guide/modules/configuration-guide/pages/index-location-format.adoc
 
b/solr/solr-ref-guide/modules/configuration-guide/pages/index-location-format.adoc
index f577db4..1735572 100644
--- 
a/solr/solr-ref-guide/modules/configuration-guide/pages/index-location-format.adoc
+++ 
b/solr/solr-ref-guide/modules/configuration-guide/pages/index-location-format.adoc
@@ -60,6 +60,6 @@ Use this DirectoryFactory to store your index in RAM.
 
 [NOTE]
 ====
-If you are using Hadoop and would like to store your indexes in HDFS, you 
should use the 
{solr-javadocs}/modules/hdfs/org/apache/solr/core/HdfsDirectoryFactory.html[`solr.HdfsDirectoryFactory`]
 instead of either of the above implementations.
+If you are using Hadoop and would like to store your indexes in HDFS, you 
should use the 
{solr-javadocs}/modules/hdfs/org/apache/solr/hdfs/HdfsDirectoryFactory.html[`solr.HdfsDirectoryFactory`]
 instead of either of the above implementations.
 For more details, see the section xref:deployment-guide:solr-on-hdfs.adoc[].
 ====
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/pages/backup-restore.adoc 
b/solr/solr-ref-guide/modules/deployment-guide/pages/backup-restore.adoc
index 12ba11f..18a5527 100644
--- a/solr/solr-ref-guide/modules/deployment-guide/pages/backup-restore.adoc
+++ b/solr/solr-ref-guide/modules/deployment-guide/pages/backup-restore.adoc
@@ -452,7 +452,7 @@ An example configuration using these properties can be 
found below:
 [source,xml]
 ----
 <backup>
-  <repository name="hdfs" 
class="org.apache.solr.core.backup.repository.HdfsBackupRepository" 
default="false">
+  <repository name="hdfs" 
class="org.apache.solr.hdfs.backup.repository.HdfsBackupRepository" 
default="false">
     <str 
name="solr.hdfs.home">hdfs://some_hdfs_host:1234/solr/backup/data</str>
     <int name="solr.hdfs.buffer.size">8192</int>
     <str name="solr.hdfs.permissions.umask-mode">0022</str>
diff --git 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc
index 7c544fc..652f95b 100644
--- 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc
+++ 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-9.adoc
@@ -125,6 +125,8 @@ This is only applicable for users returning information in 
JSON format, which is
 * SOLR-14660: HDFS storage support has been moved to a module. Existing Solr 
configurations do not need any HDFS-related
 changes, however the module needs to be installed - see the section 
xref:deployment-guide:solr-on-hdfs.adoc[].
 
+* SOLR-16040: If you are using the HDFS backup repository, you need to change 
the repository class to 
`org.apache.solr.hdfs.backup.repository.HdfsBackupRepository` - see the HDFS 
section in xref:deployment-guide:backup-restore.adoc[].
+
 * SOLR-13989: Hadoop authentication support has been moved to the hadoop-auth 
module. Existing Solr configurations do not need any Hadoop authentication 
related
 changes, however the module needs to be installed - see the section 
xref:deployment-guide:hadoop-authentication-plugin.adoc[].
 
diff --git 
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
 
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
index 07a803c..c7307dd 100644
--- 
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
+++ 
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
@@ -86,7 +86,7 @@ import static 
org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
 public abstract class AbstractCollectionsAPIDistributedZkTestBase extends 
SolrCloudTestCase {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  abstract String getConfigSet();
+  protected abstract String getConfigSet();
 
   @Before
   public void setupCluster() throws Exception {

Reply via email to