Skip to content

Commit

Permalink
[BACKLOG-4319] prevent metastore dbs from overriding shared
Browse files Browse the repository at this point in the history
  • Loading branch information
tgf committed Jul 24, 2015
1 parent d18f627 commit 1b78f1a
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
10 changes: 7 additions & 3 deletions engine/src/org/pentaho/di/base/AbstractMeta.java
Expand Up @@ -408,8 +408,8 @@ public void importFromMetaStore() throws MetaStoreException, KettlePluginExcepti
if ( databaseType != null ) {
List<IMetaStoreElement> databaseElements = metaStore.getElements( PentahoDefaults.NAMESPACE, databaseType );
for ( IMetaStoreElement databaseElement : databaseElements ) {
addOrReplaceDatabase( DatabaseMetaStoreUtil.loadDatabaseMetaFromDatabaseElement(
metaStore, databaseElement ) );
addDatabase( DatabaseMetaStoreUtil.loadDatabaseMetaFromDatabaseElement(
metaStore, databaseElement ), false );
}
}

Expand Down Expand Up @@ -1023,10 +1023,14 @@ public ChannelLogTable getChannelLogTable() {
*/
@Override
public void addOrReplaceDatabase( DatabaseMeta databaseMeta ) {
addDatabase( databaseMeta, true );
}

protected void addDatabase( DatabaseMeta databaseMeta, boolean replace ) {
int index = databases.indexOf( databaseMeta );
if ( index < 0 ) {
addDatabase( databaseMeta );
} else {
} else if ( replace ) {
DatabaseMeta previous = getDatabase( index );
previous.replaceMeta( databaseMeta );
}
Expand Down
24 changes: 24 additions & 0 deletions engine/test-src/org/pentaho/di/trans/TransMetaTest.java
Expand Up @@ -30,16 +30,19 @@
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.gui.Point;
import org.pentaho.di.core.row.RowMeta;
import org.pentaho.di.core.row.RowMetaInterface;
import org.pentaho.di.core.row.value.ValueMetaString;
import org.pentaho.di.core.variables.VariableSpace;
import org.pentaho.di.metastore.DatabaseMetaStoreUtil;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.trans.step.StepIOMeta;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.trans.step.StepMetaInterface;
import org.pentaho.metastore.api.IMetaStore;
import org.pentaho.metastore.stores.memory.MemoryMetaStore;

public class TransMetaTest {

Expand Down Expand Up @@ -108,6 +111,27 @@ public void getThisStepFieldsPassesCloneRowMeta() throws Exception {
assertEquals( overriddenValue, thisStepsFields.getValueMeta( 0 ).getName() );
}

@Test
public void testDatabaseNotOverridden() throws Exception {
final String name = "db meta";

DatabaseMeta dbMetaShared = new DatabaseMeta();
dbMetaShared.setName( name );
dbMetaShared.setHostname( "host" );
DatabaseMeta dbMetaStore = new DatabaseMeta();
dbMetaStore.setName( name );
dbMetaStore.setHostname( "anotherhost");
IMetaStore mstore = new MemoryMetaStore();
DatabaseMetaStoreUtil.createDatabaseElement( mstore, dbMetaStore );

TransMeta trans = new TransMeta();
trans.addOrReplaceDatabase( dbMetaShared );
trans.setMetaStore( mstore );
trans.importFromMetaStore();
DatabaseMeta dbMeta = trans.findDatabase( name );
assertEquals( dbMetaShared.getHostname(), dbMeta.getHostname() );
}

private static StepMeta mockStepMeta( String name ) {
StepMeta meta = mock( StepMeta.class );
when( meta.getName() ).thenReturn( name );
Expand Down

0 comments on commit 1b78f1a

Please sign in to comment.