The bug is more serious. If the controller goes through a session expiration and gets re-elected, which is rare, it will stop responding to all new topic state changes. Not only that, it will also stop responding to broker failures or startups.
The root cause of the bug is in the startup() API of the state machines. Both hasStarted and hasShutdown() are required since the former prevents the state machines from acting on state changes before their internal data structures are ready. The latter prevents state machines from acting on state changes while they are being shutdown.