use of org.jkiss.dbeaver.model.admin.locks.DBAServerLock in project dbeaver by serge-rider.
the class OracleLockEditor method createLockViewer.
@Override
protected LockManagerViewer createLockViewer(DBCExecutionContext executionContext, Composite parent) {
DBAServerLockManager<DBAServerLock, DBAServerLockItem> lockManager = (DBAServerLockManager) new OracleLockManager((OracleDataSource) executionContext.getDataSource());
return new LockManagerViewer(this, parent, lockManager) {
@Override
protected void contributeToToolbar(DBAServerLockManager<DBAServerLock, DBAServerLockItem> sessionManager, IContributionManager contributionManager) {
contributionManager.add(new Separator());
}
@Override
protected void onLockSelect(final DBAServerLock lock) {
super.onLockSelect(lock);
if (lock != null) {
final OracleLock pLock = (OracleLock) lock;
super.refreshDetail(new HashMap<String, Object>() {
{
put(OracleLockManager.sidHold, pLock.getHold_sid());
put(OracleLockManager.sidWait, pLock.getWait_sid());
}
});
}
}
};
}
use of org.jkiss.dbeaver.model.admin.locks.DBAServerLock in project dbeaver by serge-rider.
the class LockGraphManager method buildGraphs.
@SuppressWarnings({ "unchecked", "rawtypes" })
public void buildGraphs(Map<Object, ? extends DBAServerLock> locks) {
Set<DBAServerLock> roots = new HashSet<>();
this.nodes.clear();
this.graphIndex.clear();
for (DBAServerLock l : locks.values()) {
if (locks.containsKey(l.getHoldID()) && (!l.getHoldID().equals(l.getId()))) {
DBAServerLock holder = locks.get(l.getHoldID());
l.setHoldBy(holder);
holder.waitThis().add(l);
} else {
roots.add(l);
}
nodes.put(l.getId(), new LockGraphNode(l));
}
for (DBAServerLock root : roots) {
createGraph(root);
}
}
use of org.jkiss.dbeaver.model.admin.locks.DBAServerLock in project dbeaver by serge-rider.
the class LockGraphManager method createGraph.
@SuppressWarnings("unchecked")
private LockGraph createGraph(DBAServerLock root) {
LockGraph graph = new LockGraph(root);
int maxWidth = 1;
int level = 1;
LockGraphNode nodeRoot = nodes.get(root.getId());
nodeRoot.setLevel(0);
nodeRoot.setSpan(1);
graph.getNodes().add(nodeRoot);
graphIndex.put(root.getId(), graph);
List<DBAServerLock> current = new ArrayList<>();
// Prevent Cycle
Set<DBAServerLock> touched = new HashSet<>();
current.add(root);
touched.add(root);
Map<Object, DBAServerLock> childs = new HashMap<>();
while (current.size() > 0) {
if (maxWidth < current.size()) {
maxWidth = current.size();
}
for (int index = 0; index < current.size(); index++) {
DBAServerLock l = current.get(index);
LockGraphNode node = nodes.get(l.getId());
if (index == 0) {
node.setLevelPosition(LockGraphNode.LevelPosition.LEFT);
} else if (index == current.size() - 1) {
node.setLevelPosition(LockGraphNode.LevelPosition.RIGHT);
} else {
node.setLevelPosition(LockGraphNode.LevelPosition.CENTER);
}
node.setSpan(current.size());
for (DBAServerLock c : l.waitThis()) {
if (touched.contains(c))
continue;
touched.add(c);
childs.put(c.getId(), c);
graphIndex.put(c.getId(), graph);
LockGraphNode nodeChild = nodes.get(c.getId());
graph.getNodes().add(nodeChild);
nodeChild.setLevel(level);
LockGraphEdge edge = new LockGraphEdge();
edge.setSource(node);
edge.setTarget(nodeChild);
}
}
level++;
current = new ArrayList<>(childs.values());
childs.clear();
}
graph.setMaxWidth(maxWidth);
return graph;
}
use of org.jkiss.dbeaver.model.admin.locks.DBAServerLock in project dbeaver by dbeaver.
the class OracleLockEditor method createLockViewer.
@Override
protected LockManagerViewer createLockViewer(DBCExecutionContext executionContext, Composite parent) {
DBAServerLockManager<DBAServerLock, DBAServerLockItem> lockManager = (DBAServerLockManager) new OracleLockManager((OracleDataSource) executionContext.getDataSource());
return new LockManagerViewer(this, parent, lockManager) {
@Override
protected void contributeToToolbar(DBAServerLockManager<DBAServerLock, DBAServerLockItem> sessionManager, IContributionManager contributionManager) {
contributionManager.add(new Separator());
}
@Override
protected void onLockSelect(final DBAServerLock lock) {
super.onLockSelect(lock);
if (lock != null) {
final OracleLock pLock = (OracleLock) lock;
super.refreshDetail(new HashMap<String, Object>() {
{
put(OracleLockManager.sidHold, pLock.getHold_sid());
put(OracleLockManager.sidWait, pLock.getWait_sid());
}
});
}
}
};
}
use of org.jkiss.dbeaver.model.admin.locks.DBAServerLock in project dbeaver by dbeaver.
the class LockGraphManager method createGraph.
@SuppressWarnings("unchecked")
private LockGraph createGraph(DBAServerLock root) {
LockGraph graph = new LockGraph(root);
int maxWidth = 1;
int level = 1;
LockGraphNode nodeRoot = nodes.get(root.getId());
nodeRoot.setLevel(0);
nodeRoot.setSpan(1);
graph.getNodes().add(nodeRoot);
graphIndex.put(root.getId(), graph);
List<DBAServerLock> current = new ArrayList<>();
// Prevent Cycle
Set<DBAServerLock> touched = new HashSet<>();
current.add(root);
touched.add(root);
Map<Object, DBAServerLock> childs = new HashMap<>();
while (current.size() > 0) {
if (maxWidth < current.size()) {
maxWidth = current.size();
}
for (int index = 0; index < current.size(); index++) {
DBAServerLock l = current.get(index);
LockGraphNode node = nodes.get(l.getId());
if (index == 0) {
node.setLevelPosition(LockGraphNode.LevelPosition.LEFT);
} else if (index == current.size() - 1) {
node.setLevelPosition(LockGraphNode.LevelPosition.RIGHT);
} else {
node.setLevelPosition(LockGraphNode.LevelPosition.CENTER);
}
node.setSpan(current.size());
for (DBAServerLock c : l.waitThis()) {
if (touched.contains(c))
continue;
touched.add(c);
childs.put(c.getId(), c);
graphIndex.put(c.getId(), graph);
LockGraphNode nodeChild = nodes.get(c.getId());
graph.getNodes().add(nodeChild);
nodeChild.setLevel(level);
LockGraphEdge edge = new LockGraphEdge();
edge.setSource(node);
edge.setTarget(nodeChild);
}
}
level++;
current = new ArrayList<>(childs.values());
childs.clear();
}
graph.setMaxWidth(maxWidth);
return graph;
}
Aggregations