You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2016/10/25 16:18:53 UTC
lucene-solr:branch_6x: SOLR-9441: Solr collection backup on HDFS can
only be manipulated by the Solr process owner.
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x 529654c02 -> d961253c7
SOLR-9441: Solr collection backup on HDFS can only be manipulated by the Solr process owner.
This closes #71.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d961253c
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d961253c
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d961253c
Branch: refs/heads/branch_6x
Commit: d961253c7c031d1a9b8227cc4949dc7211a3f98f
Parents: 529654c
Author: markrmiller <ma...@apache.org>
Authored: Tue Oct 25 10:21:00 2016 -0400
Committer: markrmiller <ma...@apache.org>
Committed: Tue Oct 25 12:18:41 2016 -0400
----------------------------------------------------------------------
solr/CHANGES.txt | 3 +++
.../core/backup/repository/HdfsBackupRepository.java | 9 +++++++++
.../apache/solr/handler/TestHdfsBackupRestoreCore.java | 11 +++++++++++
3 files changed, 23 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d961253c/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 20f68b6..74501c5 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -172,6 +172,9 @@ Bug Fixes
* SOLR-9687: Fixed Interval Facet count issue in cases of open/close intervals on the same values
(Andy Chillrud, Tom�s Fern�ndez L�bbe)
+* SOLR-9441: Solr collection backup on HDFS can only be manipulated by the Solr process owner.
+ (Hrishikesh Gadre via Mark Miller)
+
Optimizations
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d961253c/solr/core/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java b/solr/core/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java
index f12d9fd..f465765 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/repository/HdfsBackupRepository.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
import org.apache.lucene.store.IndexInput;
@@ -41,6 +42,8 @@ import org.apache.solr.store.hdfs.HdfsDirectory.HdfsIndexInput;
import com.google.common.base.Preconditions;
public class HdfsBackupRepository implements BackupRepository {
+ private static final String HDFS_UMASK_MODE_PARAM = "solr.hdfs.permissions.umask-mode";
+
private HdfsDirectoryFactory factory;
private Configuration hdfsConfig = null;
private FileSystem fileSystem = null;
@@ -58,6 +61,12 @@ public class HdfsBackupRepository implements BackupRepository {
factory.init(args);
this.hdfsConfig = factory.getConf();
+ // Configure the umask mode if specified.
+ if (args.get(HDFS_UMASK_MODE_PARAM) != null) {
+ String umaskVal = (String)args.get(HDFS_UMASK_MODE_PARAM);
+ this.hdfsConfig.set(FsPermission.UMASK_LABEL, umaskVal);
+ }
+
String hdfsSolrHome = (String) Preconditions.checkNotNull(args.get(HdfsDirectoryFactory.HDFS_HOME),
"Please specify " + HdfsDirectoryFactory.HDFS_HOME + " property.");
Path path = new Path(hdfsSolrHome);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d961253c/solr/core/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java b/solr/core/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java
index 4e8d4cc..a07d491 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestHdfsBackupRestoreCore.java
@@ -27,7 +27,10 @@ import java.util.Map;
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.permission.FsAction;
+import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.protocol.HdfsConstants.SafeModeAction;
@@ -88,6 +91,7 @@ public class TestHdfsBackupRestoreCore extends SolrCloudTestCase {
" <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" +
+ " <str name=\"solr.hdfs.permissions.umask-mode\">${solr.hdfs.permissions.umask-mode:000}</str>\n" +
" </repository>\n" +
" </backup>\n" +
" \n" +
@@ -233,6 +237,13 @@ public class TestHdfsBackupRestoreCore extends SolrCloudTestCase {
}
//See if restore was successful by checking if all the docs are present again
BackupRestoreUtils.verifyDocs(nDocs, masterClient, coreName);
+
+ // Verify the permissions for the backup folder.
+ FileStatus status = fs.getFileStatus(new org.apache.hadoop.fs.Path("/backup/snapshot."+backupName));
+ FsPermission perm = status.getPermission();
+ assertEquals(FsAction.ALL, perm.getUserAction());
+ assertEquals(FsAction.ALL, perm.getGroupAction());
+ assertEquals(FsAction.ALL, perm.getOtherAction());
}
}
}