You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2016/10/26 13:50:11 UTC
[07/26] lucene-solr:jira/solr-8542-v2: SOLR-9441: Solr collection
backup on HDFS can only be manipulated by the Solr process owner.
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/27ba8e2e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/27ba8e2e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/27ba8e2e
Branch: refs/heads/jira/solr-8542-v2
Commit: 27ba8e2e82df6b901bbc5adaa3490d5f002fd76f
Parents: 0782b09
Author: markrmiller <ma...@apache.org>
Authored: Tue Oct 25 10:21:00 2016 -0400
Committer: markrmiller <ma...@apache.org>
Committed: Tue Oct 25 10:21:57 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/27ba8e2e/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 4521288..2f4827b 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -211,6 +211,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/27ba8e2e/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/27ba8e2e/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());
}
}
}