Search in sources :

Example 1 with JobMaster

use of alluxio.master.job.JobMaster in project alluxio by Alluxio.

the class TableMasterJournalIntegrationTest method journalTransformDb.

@Test
public void journalTransformDb() throws Exception {
    LocalAlluxioCluster mCluster = sClusterResource.get();
    TableMaster tableMaster = mCluster.getLocalAlluxioMaster().getMasterProcess().getMaster(TableMaster.class);
    LocalAlluxioJobCluster jobCluster = new LocalAlluxioJobCluster();
    jobCluster.start();
    JobMaster jobMaster = jobCluster.getMaster().getJobMaster();
    genTable(1, 2, true);
    tableMaster.attachDatabase(TestUdbFactory.TYPE, "connect", DB_NAME, DB_NAME, Collections.emptyMap(), false);
    List<String> tables = tableMaster.getAllTables(DB_NAME);
    assertFalse(tables.isEmpty());
    // all partitions are not transformed, so baselayout is the same as layout
    String tableName = tables.get(0);
    assertTrue(tableMaster.getTable(DB_NAME, tableName).getPartitions().stream().allMatch(partition -> partition.getBaseLayout() == partition.getLayout()));
    long jobid = tableMaster.transformTable(DB_NAME, tableName, null);
    assertNotEquals(0, jobid);
    JobTestUtils.waitForJobStatus(jobMaster, jobid, ImmutableSet.of(Status.COMPLETED, Status.CANCELED, Status.FAILED));
    final JobInfo status = jobMaster.getStatus(jobid);
    assertEquals("", status.getErrorMessage());
    assertEquals(Status.COMPLETED, status.getStatus());
    HeartbeatScheduler.execute(HeartbeatContext.MASTER_TABLE_TRANSFORMATION_MONITOR);
    // all partitions are transformed, so baselayout should be different as layout
    assertTrue(tableMaster.getTable(DB_NAME, tableName).getPartitions().stream().allMatch(partition -> partition.getBaseLayout() != partition.getLayout()));
    restartMaster();
    genTable(1, 4, true);
    TableMaster tableMasterRestart = mCluster.getLocalAlluxioMaster().getMasterProcess().getMaster(TableMaster.class);
    Table table = tableMaster.getTable(DB_NAME, tableName);
    // all partitions remain transformed
    assertTrue(tableMaster.getTable(DB_NAME, tableName).getPartitions().stream().allMatch(partition -> partition.getBaseLayout() != partition.getLayout()));
    tableMasterRestart.syncDatabase(DB_NAME);
    // The first two partitions should remain transformed, the new partitions are not transformed
    assertTrue(tableMaster.getTable(DB_NAME, tableName).getPartitions().stream().allMatch(partition -> (partition.getSpec().endsWith("0") || partition.getSpec().endsWith("1")) == (partition.getBaseLayout() != partition.getLayout())));
}
Also used : JobMaster(alluxio.master.job.JobMaster) PrincipalType(alluxio.grpc.table.PrincipalType) TestUdbFactory(alluxio.master.table.TestUdbFactory) TestRule(org.junit.rules.TestRule) Status(alluxio.job.wire.Status) PropertyKey(alluxio.conf.PropertyKey) TableMaster(alluxio.master.table.TableMaster) HeartbeatScheduler(alluxio.heartbeat.HeartbeatScheduler) DatabaseInfo(alluxio.master.table.DatabaseInfo) Constants(alluxio.Constants) Database(alluxio.grpc.table.Database) JobTestUtils(alluxio.job.util.JobTestUtils) Assert.fail(org.junit.Assert.fail) ClassRule(org.junit.ClassRule) Before(org.junit.Before) ImmutableSet(com.google.common.collect.ImmutableSet) HeartbeatContext(alluxio.heartbeat.HeartbeatContext) ManuallyScheduleHeartbeat(alluxio.heartbeat.ManuallyScheduleHeartbeat) ImmutableMap(com.google.common.collect.ImmutableMap) LocalAlluxioClusterResource(alluxio.testutils.LocalAlluxioClusterResource) LocalAlluxioJobCluster(alluxio.master.LocalAlluxioJobCluster) JobMaster(alluxio.master.job.JobMaster) Assert.assertTrue(org.junit.Assert.assertTrue) TestDatabase.genTable(alluxio.master.table.TestDatabase.genTable) Test(org.junit.Test) IOException(java.io.IOException) TestDatabase(alluxio.master.table.TestDatabase) Assert.assertNotEquals(org.junit.Assert.assertNotEquals) List(java.util.List) Rule(org.junit.Rule) Assert.assertFalse(org.junit.Assert.assertFalse) JobInfo(alluxio.job.wire.JobInfo) LocalAlluxioCluster(alluxio.master.LocalAlluxioCluster) Table(alluxio.master.table.Table) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) LocalAlluxioJobCluster(alluxio.master.LocalAlluxioJobCluster) TestDatabase.genTable(alluxio.master.table.TestDatabase.genTable) Table(alluxio.master.table.Table) LocalAlluxioCluster(alluxio.master.LocalAlluxioCluster) JobInfo(alluxio.job.wire.JobInfo) TableMaster(alluxio.master.table.TableMaster) Test(org.junit.Test)

Example 2 with JobMaster

use of alluxio.master.job.JobMaster in project alluxio by Alluxio.

the class PersistIntegrationTest method persistOnlyCompleteFiles.

@Test(timeout = 30000)
public void persistOnlyCompleteFiles() throws Exception {
    AlluxioURI path = new AlluxioURI("/" + CommonUtils.randomAlphaNumString(10));
    // Create file, but do not complete
    FileOutStream os = mFileSystem.createFile(path, CreateFilePOptions.newBuilder().setWriteType(WritePType.MUST_CACHE).setMode(TEST_MODE.toProto()).build());
    URIStatus status = mFileSystem.getStatus(path);
    // Generate a temporary path to be used by the persist job.
    String tempUfsPath = PathUtils.temporaryFileName(System.currentTimeMillis(), status.getUfsPath());
    JobMaster jobMaster = mLocalAlluxioJobCluster.getMaster().getJobMaster();
    // Run persist job on incomplete file (expected to fail)
    long failId = jobMaster.run(new PersistConfig(path.toString(), status.getMountId(), false, tempUfsPath));
    CommonUtils.waitFor("Wait for persist job to complete", () -> {
        try {
            JobInfo jobInfo = jobMaster.getStatus(failId);
            Assert.assertNotEquals("Persist should not succeed for incomplete file", COMPLETED, jobInfo.getStatus());
            if (jobInfo.getStatus() == FAILED) {
                // failed job is expected
                Assert.assertTrue("Failure expected to be about incomplete files", jobInfo.getErrorMessage().toLowerCase().contains("incomplete"));
                return true;
            }
            return false;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }, WaitForOptions.defaults().setTimeoutMs(10 * Constants.SECOND_MS).setInterval(100));
    // close the file to allow persist to happen
    os.close();
    // Run persist job on complete file (expected to succeed)
    long successId = jobMaster.run(new PersistConfig(path.toString(), status.getMountId(), false, tempUfsPath));
    CommonUtils.waitFor("Wait for persist job to complete", () -> {
        try {
            JobInfo jobInfo = jobMaster.getStatus(successId);
            Assert.assertNotEquals("Persist should not fail", FAILED, jobInfo.getStatus());
            return jobInfo.getStatus() == COMPLETED;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }, WaitForOptions.defaults().setTimeoutMs(10 * Constants.SECOND_MS).setInterval(100));
}
Also used : JobMaster(alluxio.master.job.JobMaster) JobInfo(alluxio.job.wire.JobInfo) FileOutStream(alluxio.client.file.FileOutStream) URIStatus(alluxio.client.file.URIStatus) AlluxioURI(alluxio.AlluxioURI) JobIntegrationTest(alluxio.job.JobIntegrationTest) Test(org.junit.Test)

Aggregations

JobInfo (alluxio.job.wire.JobInfo)2 JobMaster (alluxio.master.job.JobMaster)2 Test (org.junit.Test)2 AlluxioURI (alluxio.AlluxioURI)1 Constants (alluxio.Constants)1 FileOutStream (alluxio.client.file.FileOutStream)1 URIStatus (alluxio.client.file.URIStatus)1 PropertyKey (alluxio.conf.PropertyKey)1 Database (alluxio.grpc.table.Database)1 PrincipalType (alluxio.grpc.table.PrincipalType)1 HeartbeatContext (alluxio.heartbeat.HeartbeatContext)1 HeartbeatScheduler (alluxio.heartbeat.HeartbeatScheduler)1 ManuallyScheduleHeartbeat (alluxio.heartbeat.ManuallyScheduleHeartbeat)1 JobIntegrationTest (alluxio.job.JobIntegrationTest)1 JobTestUtils (alluxio.job.util.JobTestUtils)1 Status (alluxio.job.wire.Status)1 LocalAlluxioCluster (alluxio.master.LocalAlluxioCluster)1 LocalAlluxioJobCluster (alluxio.master.LocalAlluxioJobCluster)1 DatabaseInfo (alluxio.master.table.DatabaseInfo)1 Table (alluxio.master.table.Table)1