### Description

It should be enough to have ShardId + nodeId key in `routingToDataPath` to find the necessary data path. 
Changing the key would allow us to minimize the size of ClusterInfo size and find the data path when shard changes its status.

`ClusterInfo` might be sent over the wire when cluster allocation explain is executed with `includeDiskInfo=true`.
ShardRouting -> ShardId + nodeId conversion is trivial. The oposit would require additional information that could be faked.

Current key is also used in here:
https://github.com/elastic/elasticsearch/blob/9ebbe1c62bf0157d332f20f392544a1921a710df/server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java#L149-L154
where it produces a string with ShardRouting#shortSummary that is excessive and might be simplified to ShardId + nodeId as well
server/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/DiskThresholdDeciderUnitTests.java
target2 = ShardRouting.newUnassigned(
            new ShardId(new Index("target2", "9101112"), 1),
            true,
            LocalShardsRecoverySource.INSTANCE,
            new UnassignedInfo(UnassignedInfo.Reason.INDEX_CREATED, "foo")
        );
        assertEquals(1000L, getExpectedShardSize(target2, 0L, allocation));
        
        ClusterState clusterStateWithMissingSourceIndex = ClusterState.builder(clusterState)
            .metadata(Metadata.builder(metadata).remove("test"))
            .routingTable(RoutingTable.builder(clusterState.routingTable()).remove("test").build())
            .build();
        allocationService.reroute(clusterState, "foo");
        RoutingAllocation allocationWithMissingSourceIndex = new RoutingAllocation(null, clusterStateWithMissingSourceIndex, info, null, 0);
        assertEquals(42L, getExpectedShardSize(target, 42L, allocationWithMissingSourceIndex));
        assertEquals(42L, getExpectedShardSize(target2, 42L, allocationWithMissingSourceIndex));
    }
    public void testDiskUsageWithRelocations() {
        assertThat(
            new DiskThresholdDecider.DiskUsageWithRelocations(new DiskUsage("n", "n", "/dev/null", 1000L, 1000L), 0).getFreeBytes(),
            equalTo(1000L)
        );
        assertThat(
            new DiskThresholdDecider.DiskUsageWithRelocations(new DiskUsage("n", "n", "/dev/null", 1000L, 1000L), 9).getFreeBytes(),
            equalTo(991L)
        );
        assertThat(
            new DiskThresholdDecider.DiskUsageWithRelocations(new DiskUsage("n", "n", "/dev/null", 1000L, 1000L), -9).getFreeBytes(),
            equalTo(1009L)
        );