Class: Aws::S3::BucketRegionCache

Inherits:
Object
  • Object
show all
Defined in:
lib/aws-sdk-core/s3/bucket_region_cache.rb

Instance Method Summary collapse

Constructor Details

#initializeBucketRegionCache

Returns a new instance of BucketRegionCache.



7
8
9
10
11
# File 'lib/aws-sdk-core/s3/bucket_region_cache.rb', line 7

def initialize
  @regions = {}
  @listeners = []
  @mutex = Mutex.new
end

Instance Method Details

#[](bucket_name) ⇒ String?

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the cached region for the named bucket. Returns ‘nil` if the bucket is not in the cache.

Parameters:

  • bucket_name (String)

Returns:

  • (String, nil)

    Returns the cached region for the named bucket. Returns ‘nil` if the bucket is not in the cache.



43
44
45
# File 'lib/aws-sdk-core/s3/bucket_region_cache.rb', line 43

def [](bucket_name)
  @mutex.synchronize { @regions[bucket_name] }
end

#[]=(bucket_name, region_name) ⇒ void

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Caches a bucket’s region. Calling this method will trigger each of the #bucket_added listener callbacks.

Parameters:

  • bucket_name (String)
  • region_name (String)


53
54
55
56
57
58
# File 'lib/aws-sdk-core/s3/bucket_region_cache.rb', line 53

def []=(bucket_name, region_name)
  @mutex.synchronize do
    @regions[bucket_name] = region_name
    @listeners.each { |block| block.call(bucket_name, region_name) }
  end
end

#bucket_added(&block) ⇒ void

This method returns an undefined value.

Registers a block as a callback. This listener is called when a new bucket/region pair is added to the cache.

S3::BUCKET_REGIONS.bucket_added do |bucket_name, region_name|
  # ...
end

This happens when a request is made against the classic endpoint, “s3.amazonaws.com” and an error is returned requiring the request to be resent with Signature Version 4. At this point, multiple requests are made to discover the bucket region so that a v4 signature can be generated.

An application can register listeners here to avoid these extra requests in the future. By constructing an S3::Client with the proper region, a proper signature can be generated and redirects avoided.



31
32
33
34
35
36
37
# File 'lib/aws-sdk-core/s3/bucket_region_cache.rb', line 31

def bucket_added(&block)
  if block
    @mutex.synchronize { @listeners << block }
  else
    raise ArgumentError, 'missing required block'
  end
end

#clearObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



61
62
63
# File 'lib/aws-sdk-core/s3/bucket_region_cache.rb', line 61

def clear
  @mutex.synchronize { @regions = {} }
end

#to_hashHash Also known as: to_h

Returns a hash of cached bucket names and region names.

Returns:

  • (Hash)

    Returns a hash of cached bucket names and region names.



66
67
68
69
70
# File 'lib/aws-sdk-core/s3/bucket_region_cache.rb', line 66

def to_hash
  @mutex.synchronize do
    @regions.dup
  end
end