When master and slave both come down then slave start again. the slave never connect master success and server.repl_down_since is 0. genRedisInfoString repl_down_since send to sentinel is server.unixtime actual. So sentinel consinder the slave link down to master too long and don't promoted it.

        if (server.repl_state != REPL_STATE_CONNECTED) {
            info = sdscatprintf(info,
                "master_link_down_since_seconds:%jd\r\n",
                (intmax_t)(server.unixtime-server.repl_down_since));
        }

Comment From: z00526391

It should be designed in this way. When slave restarted it never connected to master, can't tell how much difference with master, and don't promoted it to master.