private void handleLogicalVertex(final LogicalVertex lv, final GlobalPhysicalGraph graph) {
		if (!lv.getPreferableWorkers().isEmpty() /*|| lv.getDistributingMode() == VertexDistributingMode.STATIC*/) {
			List<String> preferableWorkers = lv.getPreferableWorkers();
			assert (preferableWorkers != null);
			int id = 0;
			for (String hostName : preferableWorkers) {
				final WorkerSignature worker = workerManager.findWorkerSignature(hostName);
				graph.addVertex(lv, worker, id++, 1);
			}
		}
		else if (lv.getDistributingMode() == VertexDistributingMode.FULL ||
				lv.getDistributingMode() == VertexDistributingMode.HASH)
		{
			// We can deploy this vertex to any computers.
			Collection<WorkerServerInstance> workers = workerManager.getAllWorkers();
			int id = 0;
			for (WorkerServerInstance worker : workers) {
				graph.addVertex(lv, worker.getSignature(), id++, 1);
			}
		}
		else if (lv.getDistributingMode() == VertexDistributingMode.SINGLE) {
			List<String> preferableWorkers = lv.getPreferableWorkers();
			if (preferableWorkers != null && !preferableWorkers.isEmpty()) {
				final WorkerSignature worker = workerManager.findWorkerSignature(preferableWorkers.get(0));
				graph.addVertex(lv, worker, 0, 1);
			}
			else {
				graph.addVertex(lv, workerManager.getLowLoadInstance().getSignature(), 0, 1);
			}
		}
		else
			throw new RuntimeException("BUG: Unknown vertex");
	}