I think Robert and Alvaro also seems to be inclined towards throwing error for such a case, so let us do that way, but one small point is that don't you think that similar code in destroy_tablespace_directories() under label "remove_symlink:" should use similar logic?
Yes, probably.
Okay, I have updated the patch to destroy_tablespace_directories() code as well in the attached patch. I have tried to modify remove_tablespace_symlink(), so that it can be called from destroy_tablespace_directories(), but that is making it more complex, especially due to the reason that destroy_tablespace_directories() treats ENOENT as warning rather than ignoring it.