@Override public ClusterStateStore load(ClusterSpec spec) throws Exception { if ("local".equals(spec.getStateStore())) { return new FileClusterStateStore(spec); } else if ("blob".equals(spec.getStateStore())) { return new BlobClusterStateStore(spec); } else if ("memory".equals(spec.getStateStore())) { return new MemoryClusterStateStore(); } else { return new NoopClusterStateStore(); } } });
@Override public ClusterStateStore load(ClusterSpec spec) throws Exception { if ("local".equals(spec.getStateStore())) { return new FileClusterStateStore(spec); } else if ("blob".equals(spec.getStateStore())) { return new BlobClusterStateStore(spec); } else if ("memory".equals(spec.getStateStore())) { return new MemoryClusterStateStore(); } else { return new NoopClusterStateStore(); } } });
@Test(timeout = TestConstants.ITEST_TIMEOUT) public void testStoreAndLoadState() throws Exception { ClusterSpec spec = getTestClusterSpec(); BlobStoreContext context = BlobStoreContextBuilder.build(spec); String container = generateRandomContainerName(context); try { spec.setStateStore("blob"); spec.setStateStoreContainer(container); Cluster expected = createTestCluster(new String[]{"region/id1", "region/id2"}, new String[]{"role1", "role2"}); BlobClusterStateStore store = new BlobClusterStateStore(spec); store.save(expected); /* load and check the stored state */ Cluster stored = store.load(); Cluster.Instance first = Iterables.getFirst(stored.getInstances(), null); assertNotNull(first); assertThat(first.getId(), is("region/id1")); assertThat(first.getRoles().contains("role1"), is(true)); assertThat(stored.getInstances().size(), is(2)); /* destroy stored state and check it no longer exists */ store.destroy(); expected = store.load(); assertNull(expected); } finally { LOG.info("Removing temporary container '{}'", container); context.getBlobStore().deleteContainer(container); } }