package com.zendesk.maxwell.bootstrap;
import com.zendesk.maxwell.MaxwellContext;
import com.zendesk.maxwell.replication.Replicator;
import com.zendesk.maxwell.row.RowMap;
import com.zendesk.maxwell.producer.AbstractProducer;
import java.io.IOException;
import java.sql.SQLException;
public abstract class AbstractBootstrapper {
protected MaxwellContext context;
public AbstractBootstrapper(MaxwellContext context) { this.context = context; }
public boolean isStartBootstrapRow(RowMap row) {
return isBootstrapRow(row) &&
row.getData("started_at") == null &&
row.getData("completed_at") == null &&
( long ) row.getData("is_complete") == 0;
}
public boolean isCompleteBootstrapRow(RowMap row) {
return isBootstrapRow(row) &&
row.getData("started_at") != null &&
row.getData("completed_at") != null &&
( long ) row.getData("is_complete") == 1;
}
public boolean isBootstrapRow(RowMap row) {
return row.getDatabase().equals(this.context.getConfig().databaseName) &&
row.getTable().equals("bootstrap");
}
protected String bootstrapDatabase(RowMap rowmap) {
return (String) rowmap.getData("database_name");
}
protected String bootstrapTable(RowMap rowmap) {
return (String) rowmap.getData("table_name");
}
protected String bootstrapWhere(RowMap rowmap) {
return (String) rowmap.getData("where_clause");
}
abstract public boolean shouldSkip(RowMap row) throws SQLException, IOException;
abstract public void startBootstrap(RowMap startBootstrapRow, AbstractProducer producer, Replicator replicator) throws Exception;
abstract public void completeBootstrap(RowMap completeBootstrapRow, AbstractProducer producer, Replicator replicator) throws Exception;
public abstract void resume(AbstractProducer producer, Replicator replicator) throws Exception;
public abstract boolean isRunning();
public abstract void work(RowMap row, AbstractProducer producer, Replicator replicator) throws Exception;
}