|
@@ -125,6 +125,73 @@ public class TestNMLeveldbStateStoreService {
|
|
|
FileUtil.fullyDelete(TMP_DIR);
|
|
|
}
|
|
|
|
|
|
+ private List<RecoveredContainerState> loadContainersState(
|
|
|
+ RecoveryIterator<RecoveredContainerState> it) throws IOException {
|
|
|
+ List<RecoveredContainerState> containers =
|
|
|
+ new ArrayList<RecoveredContainerState>();
|
|
|
+ while (it.hasNext()) {
|
|
|
+ RecoveredContainerState rcs = it.next();
|
|
|
+ containers.add(rcs);
|
|
|
+ }
|
|
|
+ return containers;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<ContainerManagerApplicationProto> loadApplicationProtos(
|
|
|
+ RecoveryIterator<ContainerManagerApplicationProto> it)
|
|
|
+ throws IOException {
|
|
|
+ List<ContainerManagerApplicationProto> applicationProtos =
|
|
|
+ new ArrayList<ContainerManagerApplicationProto>();
|
|
|
+ while (it.hasNext()) {
|
|
|
+ applicationProtos.add(it.next());
|
|
|
+ }
|
|
|
+ return applicationProtos;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<DeletionServiceDeleteTaskProto> loadDeletionTaskProtos(
|
|
|
+ RecoveryIterator<DeletionServiceDeleteTaskProto> it) throws IOException {
|
|
|
+ List<DeletionServiceDeleteTaskProto> deleteTaskProtos =
|
|
|
+ new ArrayList<DeletionServiceDeleteTaskProto>();
|
|
|
+ while (it.hasNext()) {
|
|
|
+ deleteTaskProtos.add(it.next());
|
|
|
+ }
|
|
|
+ return deleteTaskProtos;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, RecoveredUserResources> loadUserResources(
|
|
|
+ RecoveryIterator<Map.Entry<String, RecoveredUserResources>> it)
|
|
|
+ throws IOException {
|
|
|
+ Map<String, RecoveredUserResources> userResources =
|
|
|
+ new HashMap<String, RecoveredUserResources>();
|
|
|
+ while (it.hasNext()) {
|
|
|
+ Map.Entry<String, RecoveredUserResources> entry = it.next();
|
|
|
+ userResources.put(entry.getKey(), entry.getValue());
|
|
|
+ }
|
|
|
+ return userResources;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<ApplicationAttemptId, MasterKey> loadNMTokens(
|
|
|
+ RecoveryIterator<Map.Entry<ApplicationAttemptId, MasterKey>> it)
|
|
|
+ throws IOException {
|
|
|
+ Map<ApplicationAttemptId, MasterKey> nmTokens =
|
|
|
+ new HashMap<ApplicationAttemptId, MasterKey>();
|
|
|
+ while (it.hasNext()) {
|
|
|
+ Map.Entry<ApplicationAttemptId, MasterKey> entry = it.next();
|
|
|
+ nmTokens.put(entry.getKey(), entry.getValue());
|
|
|
+ }
|
|
|
+ return nmTokens;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<ContainerId, Long> loadContainerTokens(
|
|
|
+ RecoveryIterator<Map.Entry<ContainerId, Long>> it) throws IOException {
|
|
|
+ Map<ContainerId, Long> containerTokens =
|
|
|
+ new HashMap<ContainerId, Long>();
|
|
|
+ while (it.hasNext()) {
|
|
|
+ Map.Entry<ContainerId, Long> entry = it.next();
|
|
|
+ containerTokens.put(entry.getKey(), entry.getValue());
|
|
|
+ }
|
|
|
+ return containerTokens;
|
|
|
+ }
|
|
|
+
|
|
|
private void restartStateStore() throws IOException {
|
|
|
// need to close so leveldb releases database lock
|
|
|
if (stateStore != null) {
|
|
@@ -142,7 +209,7 @@ public class TestNMLeveldbStateStoreService {
|
|
|
assertNotNull(pubts);
|
|
|
assertTrue(pubts.getLocalizedResources().isEmpty());
|
|
|
assertTrue(pubts.getInProgressResources().isEmpty());
|
|
|
- assertTrue(state.getUserResources().isEmpty());
|
|
|
+ assertTrue(loadUserResources(state.getIterator()).isEmpty());
|
|
|
}
|
|
|
|
|
|
@Test
|
|
@@ -183,7 +250,7 @@ public class TestNMLeveldbStateStoreService {
|
|
|
restartStateStore();
|
|
|
Assert.fail("Incompatible version, should expect fail here.");
|
|
|
} catch (ServiceStateException e) {
|
|
|
- Assert.assertTrue("Exception message mismatch",
|
|
|
+ Assert.assertTrue("Exception message mismatch",
|
|
|
e.getMessage().contains("Incompatible version for NM state:"));
|
|
|
}
|
|
|
}
|
|
@@ -192,7 +259,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
public void testApplicationStorage() throws IOException {
|
|
|
// test empty when no state
|
|
|
RecoveredApplicationsState state = stateStore.loadApplicationsState();
|
|
|
- assertTrue(state.getApplications().isEmpty());
|
|
|
+ List<ContainerManagerApplicationProto> apps =
|
|
|
+ loadApplicationProtos(state.getIterator());
|
|
|
+ assertTrue(apps.isEmpty());
|
|
|
|
|
|
// store an application and verify recovered
|
|
|
final ApplicationId appId1 = ApplicationId.newInstance(1234, 1);
|
|
@@ -204,8 +273,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeApplication(appId1, appProto1);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadApplicationsState();
|
|
|
- assertEquals(1, state.getApplications().size());
|
|
|
- assertEquals(appProto1, state.getApplications().get(0));
|
|
|
+ apps = loadApplicationProtos(state.getIterator());
|
|
|
+ assertEquals(1, apps.size());
|
|
|
+ assertEquals(appProto1, apps.get(0));
|
|
|
|
|
|
// add a new app
|
|
|
final ApplicationId appId2 = ApplicationId.newInstance(1234, 2);
|
|
@@ -216,23 +286,25 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeApplication(appId2, appProto2);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadApplicationsState();
|
|
|
- assertEquals(2, state.getApplications().size());
|
|
|
- assertTrue(state.getApplications().contains(appProto1));
|
|
|
- assertTrue(state.getApplications().contains(appProto2));
|
|
|
+ apps = loadApplicationProtos(state.getIterator());
|
|
|
+ assertEquals(2, apps.size());
|
|
|
+ assertTrue(apps.contains(appProto1));
|
|
|
+ assertTrue(apps.contains(appProto2));
|
|
|
|
|
|
// test removing an application
|
|
|
stateStore.removeApplication(appId2);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadApplicationsState();
|
|
|
- assertEquals(1, state.getApplications().size());
|
|
|
- assertEquals(appProto1, state.getApplications().get(0));
|
|
|
+ apps = loadApplicationProtos(state.getIterator());
|
|
|
+ assertEquals(1, apps.size());
|
|
|
+ assertEquals(appProto1, apps.get(0));
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
public void testContainerStorage() throws IOException {
|
|
|
// test empty when no state
|
|
|
List<RecoveredContainerState> recoveredContainers =
|
|
|
- stateStore.loadContainersState();
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertTrue(recoveredContainers.isEmpty());
|
|
|
|
|
|
// create a container request
|
|
@@ -254,7 +326,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.getContainerVersionKey(containerId.toString()))));
|
|
|
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
RecoveredContainerState rcs = recoveredContainers.get(0);
|
|
|
assertEquals(0, rcs.getVersion());
|
|
@@ -269,14 +342,16 @@ public class TestNMLeveldbStateStoreService {
|
|
|
// store a new container record without StartContainerRequest
|
|
|
ContainerId containerId1 = ContainerId.newContainerId(appAttemptId, 6);
|
|
|
stateStore.storeContainerLaunched(containerId1);
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
// check whether the new container record is discarded
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
|
|
|
// queue the container, and verify recovered
|
|
|
stateStore.storeContainerQueued(containerId);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
rcs = recoveredContainers.get(0);
|
|
|
assertEquals(RecoveredContainerStatus.QUEUED, rcs.getStatus());
|
|
@@ -292,7 +367,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
diags.append("some diags for container");
|
|
|
stateStore.storeContainerDiagnostics(containerId, diags);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
rcs = recoveredContainers.get(0);
|
|
|
assertEquals(RecoveredContainerStatus.LAUNCHED, rcs.getStatus());
|
|
@@ -305,7 +381,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
// pause the container, and verify recovered
|
|
|
stateStore.storeContainerPaused(containerId);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
rcs = recoveredContainers.get(0);
|
|
|
assertEquals(RecoveredContainerStatus.PAUSED, rcs.getStatus());
|
|
@@ -316,7 +393,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
// Resume the container
|
|
|
stateStore.removeContainerPaused(containerId);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
|
|
|
// increase the container size, and verify recovered
|
|
@@ -328,7 +406,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore
|
|
|
.storeContainerUpdateToken(containerId, updateTokenIdentifier);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
rcs = recoveredContainers.get(0);
|
|
|
assertEquals(0, rcs.getVersion());
|
|
@@ -342,7 +421,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerDiagnostics(containerId, diags);
|
|
|
stateStore.storeContainerKilled(containerId);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
rcs = recoveredContainers.get(0);
|
|
|
assertEquals(RecoveredContainerStatus.LAUNCHED, rcs.getStatus());
|
|
@@ -358,7 +438,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerDiagnostics(containerId, diags);
|
|
|
stateStore.storeContainerCompleted(containerId, 21);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
rcs = recoveredContainers.get(0);
|
|
|
assertEquals(RecoveredContainerStatus.COMPLETED, rcs.getStatus());
|
|
@@ -371,7 +452,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerWorkDir(containerId, "/test/workdir");
|
|
|
stateStore.storeContainerLogDir(containerId, "/test/logdir");
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
rcs = recoveredContainers.get(0);
|
|
|
assertEquals(6, rcs.getRemainingRetryAttempts());
|
|
@@ -382,12 +464,13 @@ public class TestNMLeveldbStateStoreService {
|
|
|
// remove the container and verify not recovered
|
|
|
stateStore.removeContainer(containerId);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertTrue(recoveredContainers.isEmpty());
|
|
|
// recover again to check remove clears all containers
|
|
|
restartStateStore();
|
|
|
NMStateStoreService nmStoreSpy = spy(stateStore);
|
|
|
- nmStoreSpy.loadContainersState();
|
|
|
+ loadContainersState(nmStoreSpy.getContainerStateIterator());
|
|
|
verify(nmStoreSpy,times(0)).removeContainer(any(ContainerId.class));
|
|
|
}
|
|
|
|
|
@@ -399,7 +482,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerRestartTimes(containerId,
|
|
|
finishTimeForRetryAttempts);
|
|
|
restartStateStore();
|
|
|
- RecoveredContainerState rcs = stateStore.loadContainersState().get(0);
|
|
|
+ RecoveredContainerState rcs =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator()).get(0);
|
|
|
List<Long> recoveredRestartTimes = rcs.getRestartTimes();
|
|
|
assertEquals(1462700529039L, (long)recoveredRestartTimes.get(0));
|
|
|
assertEquals(1462700529050L, (long)recoveredRestartTimes.get(1));
|
|
@@ -481,7 +565,7 @@ public class TestNMLeveldbStateStoreService {
|
|
|
assertTrue(pubts.getLocalizedResources().isEmpty());
|
|
|
assertTrue(pubts.getInProgressResources().isEmpty());
|
|
|
Map<String, RecoveredUserResources> userResources =
|
|
|
- state.getUserResources();
|
|
|
+ loadUserResources(state.getIterator());
|
|
|
assertEquals(1, userResources.size());
|
|
|
RecoveredUserResources rur = userResources.get(user);
|
|
|
LocalResourceTrackerState privts = rur.getPrivateTrackerState();
|
|
@@ -535,7 +619,7 @@ public class TestNMLeveldbStateStoreService {
|
|
|
pubts.getInProgressResources().get(pubRsrcProto1));
|
|
|
assertEquals(pubRsrcLocalPath2,
|
|
|
pubts.getInProgressResources().get(pubRsrcProto2));
|
|
|
- userResources = state.getUserResources();
|
|
|
+ userResources = loadUserResources(state.getIterator());
|
|
|
assertEquals(1, userResources.size());
|
|
|
rur = userResources.get(user);
|
|
|
privts = rur.getPrivateTrackerState();
|
|
@@ -584,7 +668,7 @@ public class TestNMLeveldbStateStoreService {
|
|
|
assertTrue(pubts.getLocalizedResources().isEmpty());
|
|
|
assertTrue(pubts.getInProgressResources().isEmpty());
|
|
|
Map<String, RecoveredUserResources> userResources =
|
|
|
- state.getUserResources();
|
|
|
+ loadUserResources(state.getIterator());
|
|
|
assertEquals(1, userResources.size());
|
|
|
RecoveredUserResources rur = userResources.get(user);
|
|
|
LocalResourceTrackerState privts = rur.getPrivateTrackerState();
|
|
@@ -654,7 +738,7 @@ public class TestNMLeveldbStateStoreService {
|
|
|
assertEquals(1, pubts.getInProgressResources().size());
|
|
|
assertEquals(pubRsrcLocalPath2,
|
|
|
pubts.getInProgressResources().get(pubRsrcProto2));
|
|
|
- userResources = state.getUserResources();
|
|
|
+ userResources = loadUserResources(state.getIterator());
|
|
|
assertEquals(1, userResources.size());
|
|
|
rur = userResources.get(user);
|
|
|
privts = rur.getPrivateTrackerState();
|
|
@@ -762,7 +846,7 @@ public class TestNMLeveldbStateStoreService {
|
|
|
assertEquals(pubLocalizedProto1,
|
|
|
pubts.getLocalizedResources().iterator().next());
|
|
|
Map<String, RecoveredUserResources> userResources =
|
|
|
- state.getUserResources();
|
|
|
+ loadUserResources(state.getIterator());
|
|
|
assertTrue(userResources.isEmpty());
|
|
|
}
|
|
|
|
|
@@ -771,7 +855,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
// test empty when no state
|
|
|
RecoveredDeletionServiceState state =
|
|
|
stateStore.loadDeletionServiceState();
|
|
|
- assertTrue(state.getTasks().isEmpty());
|
|
|
+ List<DeletionServiceDeleteTaskProto> deleteTaskProtos =
|
|
|
+ loadDeletionTaskProtos(state.getIterator());
|
|
|
+ assertTrue(deleteTaskProtos.isEmpty());
|
|
|
|
|
|
// store a deletion task and verify recovered
|
|
|
DeletionServiceDeleteTaskProto proto =
|
|
@@ -788,8 +874,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeDeletionTask(proto.getId(), proto);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadDeletionServiceState();
|
|
|
- assertEquals(1, state.getTasks().size());
|
|
|
- assertEquals(proto, state.getTasks().get(0));
|
|
|
+ deleteTaskProtos = loadDeletionTaskProtos(state.getIterator());
|
|
|
+ assertEquals(1, deleteTaskProtos.size());
|
|
|
+ assertEquals(proto, deleteTaskProtos.get(0));
|
|
|
|
|
|
// store another deletion task
|
|
|
DeletionServiceDeleteTaskProto proto2 =
|
|
@@ -802,31 +889,36 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeDeletionTask(proto2.getId(), proto2);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadDeletionServiceState();
|
|
|
- assertEquals(2, state.getTasks().size());
|
|
|
- assertTrue(state.getTasks().contains(proto));
|
|
|
- assertTrue(state.getTasks().contains(proto2));
|
|
|
+ deleteTaskProtos = loadDeletionTaskProtos(state.getIterator());
|
|
|
+ assertEquals(2, deleteTaskProtos.size());
|
|
|
+ assertTrue(deleteTaskProtos.contains(proto));
|
|
|
+ assertTrue(deleteTaskProtos.contains(proto2));
|
|
|
+
|
|
|
|
|
|
// delete a task and verify gone after recovery
|
|
|
stateStore.removeDeletionTask(proto2.getId());
|
|
|
restartStateStore();
|
|
|
- state = stateStore.loadDeletionServiceState();
|
|
|
- assertEquals(1, state.getTasks().size());
|
|
|
- assertEquals(proto, state.getTasks().get(0));
|
|
|
+ state = stateStore.loadDeletionServiceState();
|
|
|
+ deleteTaskProtos = loadDeletionTaskProtos(state.getIterator());
|
|
|
+ assertEquals(1, deleteTaskProtos.size());
|
|
|
+ assertEquals(proto, deleteTaskProtos.get(0));
|
|
|
|
|
|
// delete the last task and verify none left
|
|
|
stateStore.removeDeletionTask(proto.getId());
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadDeletionServiceState();
|
|
|
- assertTrue(state.getTasks().isEmpty());
|
|
|
- }
|
|
|
+ deleteTaskProtos = loadDeletionTaskProtos(state.getIterator());
|
|
|
+ assertTrue(deleteTaskProtos.isEmpty()); }
|
|
|
|
|
|
@Test
|
|
|
public void testNMTokenStorage() throws IOException {
|
|
|
// test empty when no state
|
|
|
RecoveredNMTokensState state = stateStore.loadNMTokensState();
|
|
|
+ Map<ApplicationAttemptId, MasterKey> loadedAppKeys =
|
|
|
+ loadNMTokens(state.getIterator());
|
|
|
assertNull(state.getCurrentMasterKey());
|
|
|
assertNull(state.getPreviousMasterKey());
|
|
|
- assertTrue(state.getApplicationMasterKeys().isEmpty());
|
|
|
+ assertTrue(loadedAppKeys.isEmpty());
|
|
|
|
|
|
// store a master key and verify recovered
|
|
|
NMTokenSecretManagerForTest secretMgr = new NMTokenSecretManagerForTest();
|
|
@@ -834,18 +926,20 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeNMTokenCurrentMasterKey(currentKey);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadNMTokensState();
|
|
|
+ loadedAppKeys = loadNMTokens(state.getIterator());
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertNull(state.getPreviousMasterKey());
|
|
|
- assertTrue(state.getApplicationMasterKeys().isEmpty());
|
|
|
+ assertTrue(loadedAppKeys.isEmpty());
|
|
|
|
|
|
// store a previous key and verify recovered
|
|
|
MasterKey prevKey = secretMgr.generateKey();
|
|
|
stateStore.storeNMTokenPreviousMasterKey(prevKey);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadNMTokensState();
|
|
|
+ loadedAppKeys = loadNMTokens(state.getIterator());
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertEquals(prevKey, state.getPreviousMasterKey());
|
|
|
- assertTrue(state.getApplicationMasterKeys().isEmpty());
|
|
|
+ assertTrue(loadedAppKeys.isEmpty());
|
|
|
|
|
|
// store a few application keys and verify recovered
|
|
|
ApplicationAttemptId attempt1 = ApplicationAttemptId.newInstance(
|
|
@@ -858,10 +952,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeNMTokenApplicationMasterKey(attempt2, attemptKey2);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadNMTokensState();
|
|
|
+ loadedAppKeys = loadNMTokens(state.getIterator());
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertEquals(prevKey, state.getPreviousMasterKey());
|
|
|
- Map<ApplicationAttemptId, MasterKey> loadedAppKeys =
|
|
|
- state.getApplicationMasterKeys();
|
|
|
assertEquals(2, loadedAppKeys.size());
|
|
|
assertEquals(attemptKey1, loadedAppKeys.get(attempt1));
|
|
|
assertEquals(attemptKey2, loadedAppKeys.get(attempt2));
|
|
@@ -880,9 +973,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeNMTokenCurrentMasterKey(currentKey);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadNMTokensState();
|
|
|
+ loadedAppKeys = loadNMTokens(state.getIterator());
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertEquals(prevKey, state.getPreviousMasterKey());
|
|
|
- loadedAppKeys = state.getApplicationMasterKeys();
|
|
|
assertEquals(2, loadedAppKeys.size());
|
|
|
assertNull(loadedAppKeys.get(attempt1));
|
|
|
assertEquals(attemptKey2, loadedAppKeys.get(attempt2));
|
|
@@ -894,9 +987,10 @@ public class TestNMLeveldbStateStoreService {
|
|
|
// test empty when no state
|
|
|
RecoveredContainerTokensState state =
|
|
|
stateStore.loadContainerTokensState();
|
|
|
+ Map<ContainerId, Long> loadedActiveTokens = loadContainerTokens(state.it);
|
|
|
assertNull(state.getCurrentMasterKey());
|
|
|
assertNull(state.getPreviousMasterKey());
|
|
|
- assertTrue(state.getActiveTokens().isEmpty());
|
|
|
+ assertTrue(loadedActiveTokens.isEmpty());
|
|
|
|
|
|
// store a master key and verify recovered
|
|
|
ContainerTokenKeyGeneratorForTest keygen =
|
|
@@ -905,18 +999,20 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerTokenCurrentMasterKey(currentKey);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadContainerTokensState();
|
|
|
+ loadedActiveTokens = loadContainerTokens(state.it);
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertNull(state.getPreviousMasterKey());
|
|
|
- assertTrue(state.getActiveTokens().isEmpty());
|
|
|
+ assertTrue(loadedActiveTokens.isEmpty());
|
|
|
|
|
|
// store a previous key and verify recovered
|
|
|
MasterKey prevKey = keygen.generateKey();
|
|
|
stateStore.storeContainerTokenPreviousMasterKey(prevKey);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadContainerTokensState();
|
|
|
+ loadedActiveTokens = loadContainerTokens(state.it);
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertEquals(prevKey, state.getPreviousMasterKey());
|
|
|
- assertTrue(state.getActiveTokens().isEmpty());
|
|
|
+ assertTrue(loadedActiveTokens.isEmpty());
|
|
|
|
|
|
// store a few container tokens and verify recovered
|
|
|
ContainerId cid1 = BuilderUtils.newContainerId(1, 1, 1, 1);
|
|
@@ -927,10 +1023,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerToken(cid2, expTime2);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadContainerTokensState();
|
|
|
+ loadedActiveTokens = loadContainerTokens(state.it);
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertEquals(prevKey, state.getPreviousMasterKey());
|
|
|
- Map<ContainerId, Long> loadedActiveTokens =
|
|
|
- state.getActiveTokens();
|
|
|
assertEquals(2, loadedActiveTokens.size());
|
|
|
assertEquals(expTime1, loadedActiveTokens.get(cid1));
|
|
|
assertEquals(expTime2, loadedActiveTokens.get(cid2));
|
|
@@ -948,9 +1043,9 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerTokenCurrentMasterKey(currentKey);
|
|
|
restartStateStore();
|
|
|
state = stateStore.loadContainerTokensState();
|
|
|
+ loadedActiveTokens = loadContainerTokens(state.it);
|
|
|
assertEquals(currentKey, state.getCurrentMasterKey());
|
|
|
assertEquals(prevKey, state.getPreviousMasterKey());
|
|
|
- loadedActiveTokens = state.getActiveTokens();
|
|
|
assertEquals(2, loadedActiveTokens.size());
|
|
|
assertNull(loadedActiveTokens.get(cid1));
|
|
|
assertEquals(expTime2, loadedActiveTokens.get(cid2));
|
|
@@ -1029,8 +1124,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
@Test
|
|
|
public void testUnexpectedKeyDoesntThrowException() throws IOException {
|
|
|
// test empty when no state
|
|
|
- List<RecoveredContainerState> recoveredContainers = stateStore
|
|
|
- .loadContainersState();
|
|
|
+ List<RecoveredContainerState> recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertTrue(recoveredContainers.isEmpty());
|
|
|
|
|
|
ApplicationId appId = ApplicationId.newInstance(1234, 3);
|
|
@@ -1045,7 +1140,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
+ containerId.toString() + "/invalidKey1234").getBytes();
|
|
|
stateStore.getDB().put(invalidKey, new byte[1]);
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
RecoveredContainerState rcs = recoveredContainers.get(0);
|
|
|
assertEquals(RecoveredContainerStatus.REQUESTED, rcs.getStatus());
|
|
@@ -1162,8 +1258,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
@Test
|
|
|
public void testStateStoreForResourceMapping() throws IOException {
|
|
|
// test empty when no state
|
|
|
- List<RecoveredContainerState> recoveredContainers = stateStore
|
|
|
- .loadContainersState();
|
|
|
+ List<RecoveredContainerState> recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertTrue(recoveredContainers.isEmpty());
|
|
|
|
|
|
ApplicationId appId = ApplicationId.newInstance(1234, 3);
|
|
@@ -1190,7 +1286,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
|
|
|
// add a invalid key
|
|
|
restartStateStore();
|
|
|
- recoveredContainers = stateStore.loadContainersState();
|
|
|
+ recoveredContainers =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator());
|
|
|
assertEquals(1, recoveredContainers.size());
|
|
|
RecoveredContainerState rcs = recoveredContainers.get(0);
|
|
|
List<Serializable> res = rcs.getResourceMappings()
|
|
@@ -1253,7 +1350,8 @@ public class TestNMLeveldbStateStoreService {
|
|
|
stateStore.storeContainerRestartTimes(containerId,
|
|
|
restartTimes);
|
|
|
restartStateStore();
|
|
|
- RecoveredContainerState rcs = stateStore.loadContainersState().get(0);
|
|
|
+ RecoveredContainerState rcs =
|
|
|
+ loadContainersState(stateStore.getContainerStateIterator()).get(0);
|
|
|
List<Long> recoveredRestartTimes = rcs.getRestartTimes();
|
|
|
assertTrue(recoveredRestartTimes.isEmpty());
|
|
|
}
|