Remove System.exit's from AdminUtil and lift them to the Admin class with the main method. Add UTF8 charset to AdminUtil where necessary.
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/5f416cbf Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/5f416cbf Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/5f416cbf Branch: refs/heads/2292-findbugs Commit: 5f416cbfc04bb7aaabf482f688714b316d92a658 Parents: d2dceb2 Author: Josh Elser <els...@apache.org> Authored: Fri Jan 31 13:25:14 2014 -0500 Committer: Josh Elser <els...@apache.org> Committed: Fri Jan 31 22:18:53 2014 -0500 ---------------------------------------------------------------------- .../org/apache/accumulo/fate/AdminUtil.java | 33 ++++++++++++++------ .../org/apache/accumulo/server/fate/Admin.java | 8 +++-- 2 files changed, 29 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/5f416cbf/fate/src/main/java/org/apache/accumulo/fate/AdminUtil.java ---------------------------------------------------------------------- diff --git a/fate/src/main/java/org/apache/accumulo/fate/AdminUtil.java b/fate/src/main/java/org/apache/accumulo/fate/AdminUtil.java index bc6874f..0162466 100644 --- a/fate/src/main/java/org/apache/accumulo/fate/AdminUtil.java +++ b/fate/src/main/java/org/apache/accumulo/fate/AdminUtil.java @@ -16,6 +16,7 @@ */ package org.apache.accumulo.fate; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -33,6 +34,8 @@ import org.apache.zookeeper.KeeperException; * A utility to administer FATE operations */ public class AdminUtil<T> { + private static final Charset UTF8 = Charset.forName("UTF-8"); + public void print(ZooStore<T> zs, IZooReaderWriter zk, String lockPath) throws KeeperException, InterruptedException { Map<Long,List<String>> heldLocks = new HashMap<Long,List<String>>(); Map<Long,List<String>> waitingLocks = new HashMap<Long,List<String>>(); @@ -51,7 +54,7 @@ public class AdminUtil<T> { for (String node : lockNodes) { try { byte[] data = zk.getData(lockPath + "/" + id + "/" + node, null); - String lda[] = new String(data).split(":"); + String lda[] = new String(data, UTF8).split(":"); if (lda[0].charAt(0) == 'W') sawWriteLock = true; @@ -129,22 +132,30 @@ public class AdminUtil<T> { } } - public void prepDelete(ZooStore<T> zs, IZooReaderWriter zk, String path, String txidStr) { - checkGlobalLock(zk, path); + public boolean prepDelete(ZooStore<T> zs, IZooReaderWriter zk, String path, String txidStr) { + if (!checkGlobalLock(zk, path)) { + return false; + } long txid = Long.parseLong(txidStr, 16); zs.reserve(txid); zs.delete(txid); zs.unreserve(txid, 0); + + return true; } - public void prepFail(ZooStore<T> zs, IZooReaderWriter zk, String path, String txidStr) { - checkGlobalLock(zk, path); + public boolean prepFail(ZooStore<T> zs, IZooReaderWriter zk, String path, String txidStr) { + if (!checkGlobalLock(zk, path)) { + return false; + } long txid = Long.parseLong(txidStr, 16); zs.reserve(txid); zs.setStatus(txid, TStatus.FAILED_IN_PROGRESS); zs.unreserve(txid, 0); + + return true; } public void deleteLocks(ZooStore<T> zs, IZooReaderWriter zk, String path, String txidStr) throws KeeperException, InterruptedException { @@ -156,25 +167,27 @@ public class AdminUtil<T> { for (String node : lockNodes) { String lockPath = path + "/" + id + "/" + node; byte[] data = zk.getData(path + "/" + id + "/" + node, null); - String lda[] = new String(data).split(":"); + String lda[] = new String(data, UTF8).split(":"); if (lda[1].equals(txidStr)) zk.recursiveDelete(lockPath, NodeMissingPolicy.SKIP); } } } - public void checkGlobalLock(IZooReaderWriter zk, String path) { + public boolean checkGlobalLock(IZooReaderWriter zk, String path) { try { if (ZooLock.getLockData(zk.getZooKeeper(), path) != null) { System.err.println("ERROR: Master lock is held, not running"); - System.exit(-1); + return false; } } catch (KeeperException e) { System.err.println("ERROR: Could not read master lock, not running " + e.getMessage()); - System.exit(-1); + return false; } catch (InterruptedException e) { System.err.println("ERROR: Could not read master lock, not running" + e.getMessage()); - System.exit(-1); + return false; } + + return true; } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/5f416cbf/server/src/main/java/org/apache/accumulo/server/fate/Admin.java ---------------------------------------------------------------------- diff --git a/server/src/main/java/org/apache/accumulo/server/fate/Admin.java b/server/src/main/java/org/apache/accumulo/server/fate/Admin.java index c375981..4a5f0bc 100644 --- a/server/src/main/java/org/apache/accumulo/server/fate/Admin.java +++ b/server/src/main/java/org/apache/accumulo/server/fate/Admin.java @@ -79,9 +79,13 @@ public class Admin { ZooStore<Master> zs = new ZooStore<Master>(path, zk); if (jc.getParsedCommand().equals("fail")) { - admin.prepFail(zs, zk, masterPath, args[1]); + if (!admin.prepFail(zs, zk, masterPath, args[1])) { + System.exit(1); + } } else if (jc.getParsedCommand().equals("delete")) { - admin.prepDelete(zs, zk, masterPath, args[1]); + if (!admin.prepDelete(zs, zk, masterPath, args[1])) { + System.exit(1); + } admin.deleteLocks(zs, zk, ZooUtil.getRoot(instance) + Constants.ZTABLE_LOCKS, args[1]); } else if (jc.getParsedCommand().equals("print")) { admin.print(zs, zk, ZooUtil.getRoot(instance) + Constants.ZTABLE_LOCKS);