Skip to content

Commit

Permalink
0002349: Provide more granular level of permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
vanmetjk committed Mar 6, 2020
2 parents add2f7b + 1a9fe1b commit 0abf3a6
Show file tree
Hide file tree
Showing 8 changed files with 129 additions and 150 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ public static File createSnapshot(ISymmetricEngine engine) {
engine.getDataExtractorService().extractConfigurationStandalone(engine.getNodeService().findIdentity(),
fwriter, TableConstants.SYM_NODE, TableConstants.SYM_NODE_SECURITY,
TableConstants.SYM_NODE_IDENTITY, TableConstants.SYM_NODE_HOST,
TableConstants.SYM_NODE_CHANNEL_CTL, TableConstants.SYM_CONSOLE_USER,
TableConstants.SYM_NODE_CHANNEL_CTL,TableConstants.SYM_CONSOLE_ROLE,
TableConstants.SYM_CONSOLE_USER,TableConstants.SYM_CONSOLE_ROLE_PRIVILEGE,
TableConstants.SYM_MONITOR_EVENT, TableConstants.SYM_CONSOLE_EVENT,
TableConstants.SYM_CONSOLE_USER_HIST);
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ public class TableConstants {
public static final String SYM_FILE_SNAPSHOT = "file_snapshot";
public static final String SYM_FILE_INCOMING = "file_incoming";
public static final String SYM_CONSOLE_USER = "console_user";
public static final String SYM_CONSOLE_ROLE = "console_role";
public static final String SYM_CONSOLE_ROLE_PRIVILEGE = "console_role_privilege";
public static final String SYM_CONSOLE_USER_HIST = "console_user_hist";
public static final String SYM_CONSOLE_EVENT = "console_event";
public static final String SYM_EXTENSION = "extension";
Expand Down Expand Up @@ -187,6 +189,8 @@ protected static List<String> populateAllTables(String tablePrefix) {
tables.add(getTableName(tablePrefix, TableConstants.SYM_FILE_SNAPSHOT));
tables.add(getTableName(tablePrefix, TableConstants.SYM_FILE_INCOMING));
tables.add(getTableName(tablePrefix, SYM_CONSOLE_USER));
tables.add(getTableName(tablePrefix, SYM_CONSOLE_ROLE));
tables.add(getTableName(tablePrefix, SYM_CONSOLE_ROLE_PRIVILEGE));
tables.add(getTableName(tablePrefix, SYM_CONSOLE_USER_HIST));
tables.add(getTableName(tablePrefix, SYM_CONSOLE_EVENT));
tables.add(getTableName(tablePrefix, SYM_EXTENSION));
Expand All @@ -196,7 +200,7 @@ protected static List<String> populateAllTables(String tablePrefix) {
tables.add(getTableName(tablePrefix, SYM_CONTEXT));
tables.add(getTableName(tablePrefix, SYM_JOB));
tables.add(getTableName(tablePrefix, SYM_TABLE_RELOAD_STATUS));

return tables;
}

Expand All @@ -216,7 +220,6 @@ public static final List<String> getTablesThatDoNotSync(String tablePrefix) {
}

public static String getTableName(String tablePrefix, String tableSuffix) {
return String.format("%s%s%s", tablePrefix, StringUtils.isNotBlank(tablePrefix) ? "_" : "",
tableSuffix);
return String.format("%s%s%s", tablePrefix, StringUtils.isNotBlank(tablePrefix) ? "_" : "", tableSuffix);
}
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -67,32 +67,32 @@ public class DatabaseUpgradeListener implements IDatabaseUpgradeListener, ISymme

protected boolean isUpgradeFromPre38;
protected boolean isUpgradeFrom38;

@Override
public String beforeUpgrade(ISymmetricDialect symmetricDialect, String tablePrefix, Database currentModel,
Database desiredModel) throws IOException {
public String beforeUpgrade(ISymmetricDialect symmetricDialect, String tablePrefix, Database currentModel, Database desiredModel)
throws IOException {
StringBuilder sb = new StringBuilder();

isUpgradeFromPre38 = isUpgradeFromPre38(tablePrefix, currentModel, desiredModel);

if (isUpgradeFromPre38) {
Table transformTable = currentModel.findTable(tablePrefix + "_" + TableConstants.SYM_TRANSFORM_TABLE);
if (transformTable != null && transformTable.findColumn("update_action") != null) {
engine.getSqlTemplate().update("update " + tablePrefix + "_" + TableConstants.SYM_TRANSFORM_TABLE +
" set update_action = 'UPD_ROW' where update_action is null");
engine.getSqlTemplate().update("update " + tablePrefix + "_" + TableConstants.SYM_TRANSFORM_TABLE
+ " set update_action = 'UPD_ROW' where update_action is null");
}

String dataGapTableName = tablePrefix + "_" + TableConstants.SYM_DATA_GAP;
if (currentModel.findTable(dataGapTableName) != null) {
if (currentModel.findTable(dataGapTableName) != null) {
engine.getSqlTemplate().update("delete from " + dataGapTableName);
}

String nodeCommunicationTable = tablePrefix + "_" + TableConstants.SYM_NODE_COMMUNICATION;
if (currentModel.findTable(nodeCommunicationTable) != null) {
engine.getSqlTemplate().update("delete from " + tablePrefix + "_" + TableConstants.SYM_NODE_COMMUNICATION);
}
}

if (isUpgradeFromPre311(tablePrefix, currentModel, desiredModel)) {
log.info("Checking data_event for upgrade");

Expand Down Expand Up @@ -159,63 +159,58 @@ public String beforeUpgrade(ISymmetricDialect symmetricDialect, String tablePref
}
}
}

if (engine.getDatabasePlatform().getName().equals(DatabaseNamesConstants.MYSQL)) {
String function = tablePrefix + "_transaction_id_post_5_7_6";
String select = "select count(*) from information_schema.routines where routine_name='"
+ function + "' and routine_schema in (select database())";
String select = "select count(*) from information_schema.routines where routine_name='" + function
+ "' and routine_schema in (select database())";

if (engine.getDatabasePlatform().getSqlTemplate().queryForInt(select) > 0) {
String drop = "drop function " + function;
engine.getDatabasePlatform().getSqlTemplate().update(drop);
log.info("Just uninstalled {}", function);
}
}

// Leave this last in the sequence of steps to make sure to capture any DML changes done before this

// Leave this last in the sequence of steps to make sure to capture any
// DML changes done before this
if (engine.getParameterService().is(ParameterConstants.AUTO_SYNC_TRIGGERS)) {
// Drop triggers on sym tables
List<IAlterDatabaseInterceptor> alterDatabaseInterceptors =
engine.getExtensionService().getExtensionPointList(IAlterDatabaseInterceptor.class);
List<IModelChange> modelChanges = engine.getDatabasePlatform().getDdlBuilder().getDetectedChanges(currentModel,
desiredModel,
List<IAlterDatabaseInterceptor> alterDatabaseInterceptors = engine.getExtensionService()
.getExtensionPointList(IAlterDatabaseInterceptor.class);
List<IModelChange> modelChanges = engine.getDatabasePlatform().getDdlBuilder().getDetectedChanges(currentModel, desiredModel,
alterDatabaseInterceptors.toArray(new IAlterDatabaseInterceptor[alterDatabaseInterceptors.size()]));

Predicate predicate = new MultiInstanceofPredicate(new Class[] {
RemovePrimaryKeyChange.class,
AddPrimaryKeyChange.class,
PrimaryKeyChange.class,
RemoveColumnChange.class,
AddColumnChange.class,
ColumnDataTypeChange.class,
ColumnSizeChange.class,
CopyColumnValueChange.class
});

Predicate predicate = new MultiInstanceofPredicate(
new Class[] { RemovePrimaryKeyChange.class, AddPrimaryKeyChange.class, PrimaryKeyChange.class, RemoveColumnChange.class,
AddColumnChange.class, ColumnDataTypeChange.class, ColumnSizeChange.class, CopyColumnValueChange.class });
@SuppressWarnings("unchecked")
Collection<TableChange> modelChangesAffectingTriggers = CollectionUtils.select(modelChanges, predicate);
Set<String> setOfTableNamesToDropTriggersFor = new HashSet<String>();
for(TableChange change: modelChangesAffectingTriggers) {
for (TableChange change : modelChangesAffectingTriggers) {
setOfTableNamesToDropTriggersFor.add(change.getChangedTable().getName());
}
engine.getTriggerRouterService().dropTriggers(setOfTableNamesToDropTriggersFor);
}

return sb.toString();
}

@Override
public String afterUpgrade(ISymmetricDialect symmetricDialect, String tablePrefix, Database model) throws IOException {

// Leave this first so triggers are put back in place before any DML is done against SymmetricDS tables

// Leave this first so triggers are put back in place before any DML is
// done against SymmetricDS tables
// Reinstall triggers on sym tables
engine.getTriggerRouterService().syncTriggers();

StringBuilder sb = new StringBuilder();
if (isUpgradeFromPre38) {
engine.getSqlTemplate().update("update " + tablePrefix + "_" + TableConstants.SYM_SEQUENCE +
" set cache_size = 10 where sequence_name = ?", Constants.SEQUENCE_OUTGOING_BATCH);
engine.getSqlTemplate().update("update " + tablePrefix + "_" + TableConstants.SYM_CHANNEL +
" set max_batch_size = 10000 where reload_flag = 1 ");
engine.getSqlTemplate().update(
"update " + tablePrefix + "_" + TableConstants.SYM_SEQUENCE + " set cache_size = 10 where sequence_name = ?",
Constants.SEQUENCE_OUTGOING_BATCH);
engine.getSqlTemplate().update(
"update " + tablePrefix + "_" + TableConstants.SYM_CHANNEL + " set max_batch_size = 10000 where reload_flag = 1 ");
}

engine.getPullService().pullConfigData(false);
Expand Down Expand Up @@ -248,29 +243,29 @@ protected void dropTriggers(Database currentModel, String tableName, String colu
}
}
}

protected boolean isUpgradeFromPre38(String tablePrefix, Database currentModel,
Database desiredModel) {

protected boolean isUpgradeFromPre38(String tablePrefix, Database currentModel, Database desiredModel) {
String monitorTableName = tablePrefix + "_" + TableConstants.SYM_MONITOR;
String nodeTableName = tablePrefix + "_" + TableConstants.SYM_NODE;
if (currentModel.findTable(nodeTableName) != null &&
currentModel.findTable(monitorTableName) == null && desiredModel.findTable(monitorTableName) != null) {
if (currentModel.findTable(nodeTableName) != null && currentModel.findTable(monitorTableName) == null
&& desiredModel.findTable(monitorTableName) != null) {
log.info("Detected upgrade from pre-3.8 version.");
return true;
} else {
return false;
}
}
}

protected boolean isUpgradeFromPre311(String tablePrefix, Database currentModel, Database desiredModel) {
Table eventTable = currentModel.findTable(tablePrefix + "_" + TableConstants.SYM_DATA_EVENT);
if (eventTable != null && eventTable.findColumn("router_id") != null) {
log.info("Detected upgrade from pre-3.11 version.");
return true;
} else {
return false;
}
}
}

@Override
public void setSymmetricEngine(ISymmetricEngine engine) {
this.engine = engine;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,8 @@ public void extractConfigurationOnly(Node node, OutputStream out) {
this.extractConfigurationStandalone(node, TransportUtils.toWriter(out),
TableConstants.SYM_NODE, TableConstants.SYM_NODE_SECURITY,
TableConstants.SYM_NODE_IDENTITY, TableConstants.SYM_NODE_HOST, TableConstants.SYM_FILE_SNAPSHOT,
TableConstants.SYM_NODE_CHANNEL_CTL, TableConstants.SYM_CONSOLE_USER,
TableConstants.SYM_NODE_CHANNEL_CTL,TableConstants.SYM_CONSOLE_ROLE,
TableConstants.SYM_CONSOLE_USER, TableConstants.SYM_CONSOLE_ROLE_PRIVILEGE,
TableConstants.SYM_TABLE_RELOAD_REQUEST, TableConstants.SYM_MONITOR_EVENT, TableConstants.SYM_CONSOLE_EVENT);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,13 +266,21 @@ public List<IModelChange> compareTables(Database sourceModel, Table sourceTable,
if (sourcePK.length != targetPK.length) {
changePK = true;
} else {
for (int pkColumnIdx = 0; (pkColumnIdx < sourcePK.length) && !changePK; pkColumnIdx++) {
if ((caseSensitive && !sourcePK[pkColumnIdx].getName().equals(
targetPK[pkColumnIdx].getName()))
|| (!caseSensitive && !sourcePK[pkColumnIdx].getName()
.equalsIgnoreCase(targetPK[pkColumnIdx].getName()))) {
changePK = true;
/* Check that the PK is the same set of columns regardless of order. The ddl reader code
* that reads primary keys currently does not order them.
*/
for (int sourceIdx = 0; (sourceIdx < sourcePK.length) && !changePK; sourceIdx++) {
boolean foundMatch = false;
for (int targetIdx = 0; (targetIdx < targetPK.length) && !changePK && !foundMatch; targetIdx++) {
Column srcPk = sourcePK[sourceIdx];
Column tgtPk = targetPK[targetIdx];
if ((caseSensitive && srcPk.getName().equals(tgtPk.getName())) ||
(!caseSensitive && srcPk.getName()
.equalsIgnoreCase(tgtPk.getName()))) {
foundMatch = true;
}
}
changePK |= !foundMatch;
}
}
if (changePK) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ protected void processTableStructureChanges(Database currentModel, Database desi
for (Iterator<Column> columnIt = changedColumns.iterator(); columnIt.hasNext();) {
Column sourceColumn = columnIt.next();
Column targetColumn = targetTable.findColumn(sourceColumn.getName(),
delimitedIdentifierModeOn);
false);

processColumnChange(sourceTable, targetTable, sourceColumn, targetColumn, ddl);
}
Expand Down
2 changes: 1 addition & 1 deletion symmetric-sqlexplorer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ apply from: symAssembleDir + '/common.gradle'
buildscript {
repositories {
jcenter()
maven { url 'http://repo.spring.io/plugins-release' }
maven { url 'https://repo.spring.io/plugins-release' }
maven { url 'https://plugins.gradle.org/m2/' }
maven { url "http://maven.vaadin.com/vaadin-addons" }
}
Expand Down

0 comments on commit 0abf3a6

Please sign in to comment.