Skip to content

Commit

Permalink
TEIID-2563 TEIID-2527 pulling back better status check code from 8.5
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Jul 29, 2013
1 parent 8737133 commit 2ca1edf
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,21 +105,36 @@ public void createConnectorManagers(VDBMetaData deployment, ExecutionFactoryProv
throw new ConnectorManagerException(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31102, model.getName(), deployment.getName(), deployment.getVersion()));
}
for (SourceMappingMetadata source : model.getSourceMappings()) {
ConnectorManager cm = getConnectorManager(source.getName());
String name = source.getTranslatorName();
String connection = source.getConnectionJndiName();
if (cm != null) {
if (!cm.getTranslatorName().equals(name)
|| !EquivalenceUtil.areEqual(cm.getConnectionName(), connection)) {
throw new ConnectorManagerException(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31103, source, deployment.getName(), deployment.getVersion()));
}
continue;
createConnectorManager(deployment, provider, source, false);
}
}
}

public void createConnectorManager(
VDBMetaData deployment, ExecutionFactoryProvider provider,
SourceMappingMetadata source, boolean replace) throws ConnectorManagerException {
ConnectorManager cm = getConnectorManager(source.getName());
String name = source.getTranslatorName();
String connection = source.getConnectionJndiName();
ExecutionFactory<Object, Object> ef = null;
if (cm != null) {
if (!cm.getTranslatorName().equals(name)
|| !EquivalenceUtil.areEqual(cm.getConnectionName(), connection)) {
if (!replace) {
throw new ConnectorManagerException(QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31103, source, deployment.getName(), deployment.getVersion()));
}
if (cm.getTranslatorName().equals(name)) {
ef = cm.getExecutionFactory();
}
ExecutionFactory<Object, Object> ef = provider.getExecutionFactory(name);
cm = createConnectorManager(name, connection, ef);
addConnectorManager(source.getName(), cm);
} else {
return;
}
}
if (ef == null) {
ef = provider.getExecutionFactory(name);
}
cm = createConnectorManager(name, connection, ef);
addConnectorManager(source.getName(), cm);
}

protected ConnectorManager createConnectorManager(String name,
Expand Down
56 changes: 19 additions & 37 deletions runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,11 @@
import org.teiid.adminapi.impl.SourceMappingMetadata;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.core.TeiidException;
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.dqp.internal.datamgr.ConnectorManager;
import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
import org.teiid.runtime.RuntimePlugin;
import org.teiid.translator.ExecutionFactory;
import org.teiid.vdb.runtime.VDBKey;


Expand Down Expand Up @@ -116,55 +114,39 @@ public void dataSourceRemoved(String dataSourceName, VDBKey vdbKey) {
}
}
}

public boolean dataSourceReplaced(String vdbName, int vdbVersion,
String modelName, String sourceName, String translatorName,
String dsName) throws AdminProcessingException {
return updateSource(vdbName, vdbVersion, new SourceMappingMetadata(sourceName, translatorName, dsName), true);
}

/**
*
* @param vdbName
* @param vdbVersion
* @param modelName
* @param sourceName
* @param translatorName
* @param dsName
* @return true if the datasource is new to the vdb
* @throws AdminProcessingException
*/
public boolean dataSourceReplaced(String vdbName, int vdbVersion,
String modelName, String sourceName, String translatorName,
String dsName) throws AdminProcessingException {
dsName = stripContext(dsName);
public boolean updateSource(String vdbName, int vdbVersion, SourceMappingMetadata mapping, boolean replace) throws AdminProcessingException {
String dsName = stripContext(mapping.getConnectionJndiName());

VDBMetaData vdb = getVDBRepository().getLiveVDB(vdbName, vdbVersion);
if (vdb == null || vdb.getStatus() == Status.FAILED) {
return false;
}
ModelMetaData model = vdb.getModel(modelName);

synchronized (vdb) {
ConnectorManagerRepository cmr = vdb.getAttachment(ConnectorManagerRepository.class);
ConnectorManager cm = cmr.getConnectorManager(sourceName);
ExecutionFactory<Object, Object> ef = cm.getExecutionFactory();
String currentTranslatorName = cm.getTranslatorName();
boolean dsReplaced = false;
String oldDsName = stripContext(cm.getConnectionName());
if (!EquivalenceUtil.areEqual(dsName, oldDsName)) {
LogManager.logInfo(LogConstants.CTX_RUNTIME, RuntimePlugin.Util.gs(RuntimePlugin.Event.TEIID40076, vdb.getName(), vdb.getVersion(), model.getSourceTranslatorName(sourceName), dsName));
dsReplaced = true;
}
if (!currentTranslatorName.equals(translatorName)) {
try {
ef = cmr.getProvider().getExecutionFactory(translatorName);
} catch (TeiidException e) {
throw new AdminProcessingException(RuntimePlugin.Event.TEIID40033, e);
}
ConnectorManager existing = cmr.getConnectorManager(mapping.getName());
try {
cmr.createConnectorManager(vdb, cmr.getProvider(), mapping, replace);
} catch (TeiidException e) {
throw new AdminProcessingException(RuntimePlugin.Event.TEIID40033, e);
}
cm = new ConnectorManager(translatorName, dsName, ef);
cmr.addConnectorManager(sourceName, cm);
if (dsReplaced) {
ArrayList<Runnable> runnables = new ArrayList<Runnable>(1);
checkStatus(runnables, vdb, model, cm);
updateVDB(runnables, vdb);
if (mapping.getConnectionJndiName() != null && (existing == null || !dsName.equals(existing.getConnectionName()))) {
List<Runnable> runnables = new ArrayList<Runnable>();
resourceAdded(dsName, runnables, vdb);
return true;
}
return dsReplaced;
return false;
}
}

Expand Down Expand Up @@ -252,5 +234,5 @@ private String getSourceName(String factoryName, ModelMetaData model) {
public abstract Executor getExecutor();

public abstract VDBRepository getVDBRepository();

}

0 comments on commit 2ca1edf

Please sign in to comment.