code: public synchronized Map<Integer, Date> getShardMap(TableDefinition tableDef) {
          assert tableDef != null;
          assert tableDef.isSharded();
          
          String appName = tableDef.getAppDef().getAppName();
          String tableName = tableDef.getTableName();
          String cacheKey = appName + "/" + tableName;
          Date cacheDate = m_cacheMap.get(cacheKey);
          if (cacheDate == null || isTooOld(cacheDate)) {
              loadShardCache(tableDef);
          }
          
          Map<Integer, Date> result = new HashMap<Integer, Date>();
          Map<String, Map<Integer, Date>> tableMap = m_appShardMap.get(appName);
          if (tableMap != null) {
              Map<Integer, Date> shardMap = tableMap.get(tableDef.getTableName());
              if (shardMap != null) {
                  result.putAll(shardMap);
              }
          }
          return result;
      }
docs: Get the shard number-to-date map for a sharded table. The given
  {@link TableDefinition} must be sharded. If the given table has no registered
  shards, an empty map is returned. The map is copied so the caller is free
  to modify.
  
  @param tableDef  {@link TableDefinition} of a sharded table.
  @return          Map of shard numbers-to-start dates. The map will be empty
  (but not null) if the given table currently has no non-default shards.