Author: ecn
Date: Fri Nov 23 18:10:58 2012
New Revision: 1413007
URL: http://svn.apache.org/viewvc?rev=1413007&view=rev
Log:
ACCUMULO-688 make lease recovery configurable
Added:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/MapRRecoverLease.java
(with props)
Modified:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/RecoverLease.java
Modified:
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java?rev=1413007&r1=1413006&r2=1413007&view=diff
==============================================================================
---
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java
(original)
+++
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/conf/Property.java
Fri Nov 23 18:10:58 2012
@@ -68,6 +68,7 @@ public enum Property {
MASTER_THREADCHECK("master.server.threadcheck.time", "1s",
PropertyType.TIMEDURATION, "The time between adjustments of the server thread
pool."),
MASTER_RECOVERY_DELAY("master.recovery.delay", "10s",
PropertyType.TIMEDURATION,
"When a tablet server's lock is deleted, it takes time for it to
completely quit. This delay gives it time before log recoveries begin."),
+ MASTER_LEASE_RECOVERY_IMPLEMETATION("master.lease.recovery.implementation",
"org.apache.accumulo.server.master.recovery.RecoverLease",
PropertyType.CLASSNAME, "A class that implements a mechansim to steal write
access to a file"),
// properties that are specific to tablet server behavior
TSERV_PREFIX("tserver.", null, PropertyType.PREFIX, "Properties in this
category affect the behavior of the tablet servers"),
Modified:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java?rev=1413007&r1=1413006&r2=1413007&view=diff
==============================================================================
---
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java
(original)
+++
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/Master.java
Fri Nov 23 18:10:58 2012
@@ -2099,8 +2099,11 @@ public class Master implements LiveTServ
synchronized (recoveriesInProgress) {
if (!recoveriesInProgress.contains(filename)) {
Master.log.info("Starting recovery of " + filename + " created for
" + host + ", tablet " + extent + " holds a reference");
+ AccumuloConfiguration aconf =
getConfiguration().getConfiguration();
+ RecoverLease impl = createInstanceFromPropertyName(aconf,
Property.MASTER_LEASE_RECOVERY_IMPLEMETATION, RecoverLease.class, new
RecoverLease());
+ impl.init(host, filename);
long tid = fate.startTransaction();
- fate.seedTransaction(tid, new RecoverLease(host, filename), true);
+ fate.seedTransaction(tid, impl, true);
recoveriesInProgress.add(filename);
}
}
Added:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/MapRRecoverLease.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/MapRRecoverLease.java?rev=1413007&view=auto
==============================================================================
---
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/MapRRecoverLease.java
(added)
+++
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/MapRRecoverLease.java
Fri Nov 23 18:10:58 2012
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.server.master.recovery;
+
+import java.io.IOException;
+
+import org.apache.accumulo.fate.Repo;
+import org.apache.accumulo.server.master.Master;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.permission.FsPermission;
+import org.apache.log4j.Logger;
+
+
+public class MapRRecoverLease extends RecoverLease {
+ private static final Logger log = Logger.getLogger(MapRRecoverLease.class);
+
+ private static final long serialVersionUID = 1L;
+
+ public MapRRecoverLease() {
+ }
+
+ @Override
+ public Repo<Master> call(long tid, Master master) throws Exception {
+ Path source = getSource(master);
+ FileSystem fs = master.getFileSystem();
+ log.info("Recovering file " + source.toString() +" by changing permission
to readonly");
+ FsPermission roPerm = new FsPermission((short) 0444);
+ try {
+ fs.setPermission(source, roPerm);
+ return new SubmitFileForRecovery(server, file);
+ } catch (IOException ex) {
+ log.error("error recovering lease ", ex);
+ // lets do this again
+ MapRRecoverLease result = new MapRRecoverLease();
+ result.init(server, file);
+ return result;
+ }
+ }
+
+}
Propchange:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/MapRRecoverLease.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/RecoverLease.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/RecoverLease.java?rev=1413007&r1=1413006&r2=1413007&view=diff
==============================================================================
---
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/RecoverLease.java
(original)
+++
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/master/recovery/RecoverLease.java
Fri Nov 23 18:10:58 2012
@@ -33,11 +33,14 @@ public class RecoverLease extends Master
private static final long serialVersionUID = 1L;
- private String server;
- private String file;
- private long start;
+ protected String server;
+ protected String file;
+ protected long start;
- public RecoverLease(String server, String file) {
+ public RecoverLease() {
+ }
+
+ public void init(String server, String file) {
this.server = server;
this.file = file;
this.start = System.currentTimeMillis();
@@ -88,12 +91,13 @@ public class RecoverLease extends Master
try {
fs.append(source).close();
log.info("Recovered lease on " + source.toString() + " using append");
-
+ return new SubmitFileForRecovery(server, file);
} catch (IOException ex) {
log.error("error recovering lease using append", ex);
+ RecoverLease result = new RecoverLease();
+ result.init(server, file);
+ return result;
}
- // lets do this again
- return new RecoverLease(server, file);
}
}