Why does the "uptime" RPC API call fail if Bitcoin Core is running but has not synced fully? At least this appears to be the case, because the function I have created to determine whether Bitcoin Core is "working" does the most minimal/simple API call I could find, which was "uptime", to see if my system can still communicate with Bitcoin Core (on the same computer) or if something has broken.

Since the blockchain has grown to an insane size, I was forced to move my Bitcoin "datadir" from a SSD disk to a mechanical one (due to running out of space on the former). Around the same time, I also configured Bitcoin Core to always use Tor for all connections. The combination of these two things caused the unexpected issue that my "is everything OK still?" script fails for Bitcoin Core when I start the computer after a night's sleep, because Bitcoin Core takes longer than before to get ready. Sometimes it can take like half an hour.

(This same thing also affects my polls for checking the current balance, which at least is understandable because Bitcoin Core probably doesn't want to report an outdated figure if the new data about to be fetched changes the balance.)

All it says in the manual is this: https://bitcoincore.org/en/doc/0.18.0/rpc/control/uptime/

(For some reason, there's no API docs for 0.18.1... the latest version is 0.18.)

My questions:


Is this a known issue/bug? Will it be fixed soon?
Should I be using some other API call to check if Bitcoin Core is running and "can talk to me"?
Is there a separate API call I could use to determine whether Bitcoin Core is "all ready for action" (fully synced)?
The node does not need to sync fully in order for RPC to start responding to queries. 

What happens is Bitcoin Core starts up in "warm up" mode. During warm up RPC is unavailable because the system is being setup. This is when wallets, the network your local UTXO information, setting the block index and verifying your local blocks take place. (I suspect you may have confused the "Verifying blocks..." message with sync'ing.). In warmup mode RPC port 8333 is open but it'll return a JSON error for every query. The open port signals to inbound connecting peers that there's a node there, but not yet able to respond to queries.

After this warmup routine is done (takes a few minutes), the node will be up and syncing from the network. During the sync, even if it takes weeks, the RPC server is up. Obviously it will not be able to respond to queries for blocks it hasn't retrieved and verified yet.


  Is this a known issue/bug? Will it be fixed soon?


Not a bug. It's part of how Bitcoin Core starts up.


  Should I be using some other API call to check if Bitcoin Core is running and "can talk to me"?


Try the help command. If it returns, it means the RPC server is up.


  Is there a separate API call I could use to determine whether Bitcoin Core is "all ready for action" (fully synced)?


You can try using getblockcount to see what the last synced block height is. It's fully synced if the height is same as network height. Again you don't need this to use RPC, but I included this to answer your question.

Try getrpcinfo to check on the RPC server status.

Check other API methods here.