ChrisMcB
ChrisMcB

Reputation: 91

S3's BOTO is returning NoSuchKey while trying to copy an existing key

I've create a key on S3.

mykey.exists() returns true

mykey.get_contents_to_filename() generates a file that is correct

But:

mykey.copy('bucket', '/backup/file')

returns: NoSuchKey The Specified key does not exist. Key = mykey

It looks like I'm using boto 2.0b4 If the key exists, why am I getting a NoSuchKey error? What am I missing?

edit: change backslash in key name to the foreslashes that I am actually using

Upvotes: 4

Views: 2200

Answers (2)

Eloff
Eloff

Reputation: 21688

I have a theory that because amazon s3 is eventually consistent, one request could see the key (.exists() == True) while another request ends up at a different s3 server which does not yet have knowledge of the new key (an inconsistent read - this is the difficulty with eventually consistent data stores. This is known behavior for s3 with a put followed by a head/get. I expect it to hold for copy as well.) After a usually short (but indefinite) period of time all requests will see your key. Normally this is only about a second or two. Put a 30 second timeout in your code between the exists() check and the copy. Does it still happen?

The issue is described here: https://forums.aws.amazon.com/thread.jspa?threadID=21634&tstart=0)

Upvotes: 2

garnaat
garnaat

Reputation: 45916

I think you may be running into an issue with your key name. The baskslash characters in the string '\backup\file' are actually is interpreted as string escapes so '\b' is replaced with the ASCII backspace character and '\f' is interpreted as the ASCII formfeed (see this for more details). While that probably isn't what you intended, it really should still work but there was a bug in the escaping of key names in boto2.0b4 (which is fixed now in github master) that is preventing this from working.

If you actually want your keyname to be "\backup\file" try specifying it as r'\backup\file' in Python. This treats it as a raw string and no escape processing will occur.

Upvotes: -1

Related Questions