3D Stokes flow, meshed in gmsh

First of all; you are meshing the interior of the obstacle. If you are not solving a Fluid-structure interaction problem (FSI), you should not mesh the interior of the obstacle.
See for instance: Using the GMSH Python API to generate complex meshes | Jørgen S. Dokken
on how to use boolean operators with gmsh.

Secondly. you are using the deprecated xml format to convert your mesh to something to read with dolfin. I would suggest using meshio as follows (pip3 install --no-binary=h5py h5py meshio --user):

import meshio

# Convert mesh
mesh_from_file = meshio.read("geom_mini.msh")


def create_mesh(mesh, cell_type, prune_z=False):
    cells = mesh.get_cells_type(cell_type)
    cell_data = mesh.get_cell_data("gmsh:physical", cell_type)
    points = mesh.points[:, :2] if prune_z else mesh.points
    out_mesh = meshio.Mesh(points=points, cells={cell_type: cells}, cell_data={
                           "name_to_read": [cell_data]})
    return out_mesh


triangle_mesh = create_mesh(mesh_from_file, "triangle")
meshio.write("facet_mesh.xdmf", triangle_mesh)

tetra_mesh = create_mesh(mesh_from_file, "tetra")
meshio.write("mesh.xdmf", tetra_mesh)

# Read mesh
mesh = Mesh()
mvc_v = MeshValueCollection("size_t", mesh, 3)
with XDMFFile("mesh.xdmf") as infile:
    infile.read(mesh)
    infile.read(mvc_v, "name_to_read")
markers = cpp.mesh.MeshFunctionSizet(mesh, mvc_v)

mvc = MeshValueCollection("size_t", mesh, 2)
with XDMFFile("facet_mesh.xdmf") as infile:
    infile.read(mvc, "name_to_read")
sub_domains = cpp.mesh.MeshFunctionSizet(mesh, mvc)

Finally, you are not imposing any boundary conditions on the side walls. Thus you allow flow to flow to the sides of your geometry.