public BackupSnapshotStep( final String daemon, final CassandraState cassandraState, final CassandraOfferRequirementProvider provider, final BackupRestoreContext context) { super(daemon, BackupSnapshotTask.nameForDaemon(daemon), cassandraState, provider); this.context = context; }
@Override public BackupSnapshotTask updateId() { return new BackupSnapshotTask(getBuilder().setTaskId(createId(getName())) .build()); }
@Override public BackupSnapshotTask update(Protos.TaskState state) { return new BackupSnapshotTask(getBuilder().setData( getData().withState(state).getBytes()).build()); }
public static BackupSnapshotTask create( final Protos.TaskInfo template, final CassandraDaemonTask daemon, final BackupRestoreContext context) { String name = nameForDaemon(daemon); CassandraData data = CassandraData.createBackupSnapshotData( "", context .forNode(name) .withLocalLocation(daemon.getVolumePath() + "/data")); Protos.TaskInfo completedTemplate = Protos.TaskInfo.newBuilder(template) .setName(name) .setTaskId(TaskUtils.toTaskId(name)) .setData(data.getBytes()) .build(); completedTemplate = org.apache.mesos.offer.TaskUtils.clearTransient(completedTemplate); return new BackupSnapshotTask(completedTemplate); }
previousUploadTasks.put("hey", BackupUploadTask.parse(TaskInfo.getDefaultInstance())); Map<String, BackupSnapshotTask> previousBackupTasks = new HashMap<String, BackupSnapshotTask>(); previousBackupTasks.put("hi", BackupSnapshotTask.parse(TaskInfo.getDefaultInstance())); Map<String, BackupSchemaTask> previousSchemaTasks = new HashMap<>(); previousSchemaTasks.put("hello", BackupSchemaTask.parse(TaskInfo.getDefaultInstance()));
public static BackupSnapshotTask parse(final Protos.TaskInfo info) { return new BackupSnapshotTask(info); }
public BackupRestoreContext getBackupRestoreContext() { return getData().getBackupRestoreContext(); } }
public BackupSnapshotTask createBackupSnapshotTask( CassandraDaemonTask daemon, BackupRestoreContext context) throws PersistenceException { Optional<Protos.TaskInfo> template = getTemplate(daemon); if (template.isPresent()) { return BackupSnapshotTask.create(template.get(), daemon, context); } else { throw new PersistenceException("Failed to retrieve ClusterTask Template."); } }
private void sendStatus(ExecutorDriver driver, Protos.TaskState state, String message) { final Protos.TaskStatus status = cassandraTask.createStatus(state,Optional.of(message)).getTaskStatus(); driver.sendStatusUpdate(status); }
@Override public void run() { try { // Send TASK_RUNNING sendStatus(driver, Protos.TaskState.TASK_RUNNING, "Started taking snapshot"); final String snapshotName = this.cassandraTask.getBackupRestoreContext().getName(); final List<String> nonSystemKeyspaces = daemon.getNonSystemKeySpaces(); LOGGER.info("Started taking snapshot for non system keyspaces: {}", nonSystemKeyspaces); for (String keyspace : nonSystemKeyspaces) { LOGGER.info("Clearing snapshot {} for keyspace: {}", snapshotName, keyspace); daemon.clearSnapshot(snapshotName, keyspace); LOGGER.info("Taking snapshot {} for keyspace: {}", snapshotName, keyspace); daemon.takeSnapShot(snapshotName, keyspace); } // Send TASK_FINISHED sendStatus(driver, Protos.TaskState.TASK_FINISHED, "Finished taking snapshot for non system keyspaces: " + nonSystemKeyspaces); } catch (Throwable t) { LOGGER.error("Snapshot failed",t); sendStatus(driver, Protos.TaskState.TASK_FAILED, t.getMessage()); } }
return CassandraDaemonTask.parse(info); case BACKUP_SNAPSHOT: return BackupSnapshotTask.parse(info); case BACKUP_SCHEMA: return BackupSchemaTask.parse(info);
@Override public BackupSnapshotTask update(Protos.Offer offer) { return new BackupSnapshotTask(getBuilder() .setSlaveId(offer.getSlaveId()) .setData(getData().withHostname(offer.getHostname()).getBytes()) .build()); }
/** * Gets the name of a BackupSnapshotTask for a CassandraDaemonTask. * * @param daemon The CassandraDaemonTask for which the snapshot will be * taken. * @return The name of the BackupSnapshotTask for daemon. */ public static final String nameForDaemon(final CassandraDaemonTask daemon) { return nameForDaemon(daemon.getName()); }
public BackupSnapshotTask getOrCreateBackupSnapshot( CassandraDaemonTask daemon, BackupRestoreContext context) throws PersistenceException { String name = BackupSnapshotTask.nameForDaemon(daemon); Map<String, BackupSnapshotTask> snapshots = getBackupSnapshotTasks(); if (snapshots.containsKey(name)) { return snapshots.get(name); } else { return createBackupSnapshotTask(daemon, context); } }