protected final List getMappingsForRange()

in elastic-db-tools/src/main/java/com/microsoft/azure/elasticdb/shard/mapper/BaseShardMapper.java [519:564]


    protected final <MappingT> List<MappingT> getMappingsForRange(Range range,
            Shard shard,
            LookupOptions lookupOptions,
            ActionGeneric3Param<ShardMapManager, ShardMap, StoreMapping, MappingT> constructMapping,
            ShardManagementErrorCategory errorCategory,
            String mappingType) {
        ShardRange sr = null;

        if (shard != null) {
            ExceptionUtils.ensureShardBelongsToShardMap(this.getShardMapManager(), this.getShardMap(), shard, "GetMappings", mappingType);
        }

        if (range != null) {
            sr = range.getShardRange();
        }

        if (lookupOptions.getValue() == 1 || lookupOptions.getValue() == 5) {
            List<ICacheStoreMapping> cachedMappings = this.getShardMapManager().getCache()
                    .lookupMappingsForRange(this.getShardMap().getStoreShardMap(), sr);

            if (cachedMappings != null && cachedMappings.size() > 0) {
                return Collections.unmodifiableList(
                        cachedMappings.stream().map(sm -> constructMapping.invoke(this.getShardMapManager(), this.getShardMap(), sm.getMapping()))
                                .collect(Collectors.toList()));
            }
        }

        if (lookupOptions.getValue() >= 4) {
            StoreResults result;

            try (IStoreOperationGlobal op = shardMapManager.getStoreOperationFactory().createGetMappingsByRangeGlobalOperation(shardMapManager,
                    "GetMappingsForRange", shardMap.getStoreShardMap(), shard != null ? shard.getStoreShard() : null, sr, errorCategory, true,
                    false)) {
                result = op.doGlobal();
            }
            catch (Exception e) {
                e.printStackTrace();
                throw (ShardManagementException) e.getCause();
            }

            return Collections.unmodifiableList(result.getStoreMappings().stream()
                    .map(sm -> constructMapping.invoke(this.getShardMapManager(), this.getShardMap(), sm)).collect(Collectors.toList()));
        }

        return null;
    }