Is it possible to upgrade a fully synced node to archive node ? means can i download older states by changing gcmode to archive ? or i will have to start from scratch ?
Someone correct me if I'm wrong but as I've understood it archive node can be built from full node information.
Full node basically gets all blocks in history and processes them (more specifically: their transactions) to verify the results. An archive node does the same thing but it also saves state information between every transaction. So with full node you can't query "what was the balance of address X at block Y" without recalculating whole history before that - archive nodes provides this information.
Therefore I'd say at least in theory you can switch from full to archive but in reality I have no idea if clients support it. My guess is no as that's not a very common scenario and you could just start from the beginning anyway, but I might be wrong.
Yes, theoretically, full node can be upgrade to archive node without resync or redownloading chaindata.
Only geth devs can confirm this, but I am pretty sure that this is not implemented. There is just too much logic and moving parts. I believe that geth devs are pretty busy to implement and test this.