/** * @return the number of blocks marked safe by safemode, or -1 * if safemode is not running. */ public static int getSafeModeSafeBlocks(NameNode nn) { SafeModeInfo smi = nn.getNamesystem().getSafeModeInfoForTests(); if (smi == null) { return -1; } return smi.blockSafe; }
/** * @return true if safemode is not running, or if safemode has already * initialized the replication queues */ public static boolean safeModeInitializedReplQueues(NameNode nn) { SafeModeInfo smi = nn.getNamesystem().getSafeModeInfoForTests(); if (smi == null) { return true; } return smi.initializedReplQueues; }
/** * @return the number of blocks marked safe by safemode, or -1 * if safemode is not running. */ public static int getSafeModeSafeBlocks(NameNode nn) throws IOException { SafeModeInfo smi = nn.getNamesystem().getSafeModeInfoForTests(); if (smi == null) { return -1; } return smi.blockSafe(); }
/** * @return true if safemode is not running, or if safemode has already * initialized the replication queues */ public static boolean safeModeInitializedReplQueues(NameNode nn) { SafeModeInfo smi = nn.getNamesystem().getSafeModeInfoForTests(); if (smi == null) { return true; } return smi.initializedReplicationQueues; }
/** * Make sure the client retries when the active NN is in safemode */ @Test (timeout=300000) public void testClientRetrySafeMode() throws Exception { final Map<Path, Boolean> results = Collections .synchronizedMap(new HashMap<Path, Boolean>()); final Path test = new Path("/test"); // let nn0 enter safemode NameNodeAdapter.enterSafeMode(nn0, false); SafeModeInfo safeMode = (SafeModeInfo) Whitebox.getInternalState( nn0.getNamesystem(), "safeMode"); Whitebox.setInternalState(safeMode, "extension", Integer.valueOf(30000)); LOG.info("enter safemode"); new Thread() { @Override public void run() { try { boolean mkdir = fs.mkdirs(test); LOG.info("mkdir finished, result is " + mkdir); synchronized (TestHASafeMode.this) { results.put(test, mkdir); TestHASafeMode.this.notifyAll(); } } catch (Exception e) { LOG.info("Got Exception while calling mkdir", e); } } }.start(); // make sure the client's call has actually been handled by the active NN assertFalse("The directory should not be created while NN in safemode", fs.exists(test)); Thread.sleep(1000); // let nn0 leave safemode NameNodeAdapter.leaveSafeMode(nn0); LOG.info("leave safemode"); synchronized (this) { while (!results.containsKey(test)) { this.wait(); } assertTrue(results.get(test)); } }