impliment cache, fix push finish state bug