def METHOD_NAME(self, request):
    logger.debug("request: %s", request.array_specs)
    logger.debug("my spec: %s", self.spec)
    lcm_voxel_size = self.spec.get_lcm_voxel_size(request.array_specs.keys())
    if lcm_voxel_size is None:
        ndims = len(self.coordinates[0])
        lcm_voxel_size = Coordinate((1,) * ndims)
    # shift to center
    total_roi = request.get_total_roi()
    request_center = total_roi.shape / 2 + total_roi.offset
    self.shift = self._get_next_shift(request_center, lcm_voxel_size)
    max_tries = 15
    tries = 0
    while not self.__check_shift(request):
        logger.warning(
            "Location %s (shift %s) skipped"
            % (self.coordinates[self.local_index], self.shift)
        )
        assert tries < max_tries, (
            "Unable to find valid shift after %d tries",
            tries,
        )
        self.shift = self._get_next_shift(request_center, lcm_voxel_size)
        tries += 1
    # Set shift for all requests
    for specs_type in [request.array_specs, request.graph_specs]:
        for key, spec in specs_type.items():
            if isinstance(spec, ArraySpec) and spec.nonspatial:
                continue
            roi = spec.roi.shift(self.shift)
            specs_type[key].roi = roi
    logger.debug(
        "{}'th ({}) shift selected: {}".format(
            self.local_index, self.coordinates[self.local_index], self.shift
        )
    )