for better performance we put lock on every node