Commit Graph

54 Commits

Author SHA1 Message Date
brett55
7033d142a0 - Bug fix for infinite loop when WaitTimeSeconds was set to 0
- Added 2 unit tests
2017-06-01 09:51:33 -06:00
Jack Danger Canty
6679def702 Python 2/3 compat for MD5 of SQS attributes 2017-05-22 18:11:59 -07:00
Jack Danger Canty
5e88b5d1b4 MD5 calculation of SQS message attributes
This implements the same MD5 hashing pattern as implemented in the Ruby
and Java AWS SDKs

Doesn't yet handle list types but if you're reading this you might be
surprised how easy that is to add. Give it a shot and if you get stuck
reach out to me for help.
2017-05-22 18:11:59 -07:00
Waldemar Hummer
a5727bf64a fix SQS message polling to abort after wait_seconds_timeout 2017-04-06 21:40:03 +10:00
michael_lerch
83084bf2af Prevent 100% cpu usage while SQS long polling on an empty queue
While using moto server with a test SQS client, I noticed significant CPU usage while the client was long polling. I narrowed this down to the `receive_messages` call of the SQS service sitting in a `while True:` statement with no work to be done, thus looping forever.

To produce this issue, I do:
```
$ python3 -m venv venv
$ . ./venv/bin/activate
(venv) $ pip install moto moto[server] boto3
Collecting moto
  Downloading moto-0.4.31-py2.py3-none-any.whl (303kB)
  --snip--
(venv) $ moto_server sqs &
[1] 31727
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
(venv) $ python3
Python 3.6.0 (default, Dec 24 2016, 08:01:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>> client = boto3.client('sqs', region_name='us-east-1', endpoint_url='http://127.0.0.1:5000');
>>> client.create_queue(QueueName='testing')
127.0.0.1 - - [16/Mar/2017 13:34:20] "POST / HTTP/1.1" 200 -
{'QueueUrl': 'http://sqs.us-east-1.amazonaws.com/123456789012/testing', 'ResponseMetadata': {'RequestId': '7a62c49f-347e-4fc4-9331-6e8e7a96aa73', 'HTTPStatusCode': 200, 'HTTPHeaders': {'content-type': 'text/html; charset=utf-8', 'content-length': '343', 'server': 'Werkzeug/0.12.1 Python/3.6.0', 'date': 'Thu, 16 Mar 2017 20:34:20 GMT'}, 'RetryAttempts': 0}}
>>> client.receive_message(QueueUrl='http://sqs.us-east-1.amazonaws.com/123456789012/testing', MaxNumberOfMessages=10, WaitTimeSeconds=10)
```

At this point the moto server will run at 100% cpu for 10 seconds until the request times out waiting for a message. If multiple clients are continuously reconnected (as in mocking a normal sqs worker setup) the server will sit at 100% cpu indefinitely.

This pull request adds a simple sleep statement to the SQS `receive_messages` call when there are no messages to process. In doing so, the loop will be limited to executing once per 0.001 seconds when the queue is empty. The CPU usage is nearly 0% after this change.
2017-03-16 13:43:45 -07:00
Seamus Cawley
bd2ff89bf1 Ensure SQS property WaitTimeSeconds is an integer 2017-03-13 13:56:55 +00:00
Steve Pulec
6d422d1f37 Add BaseModel to all models. 2017-03-11 23:41:12 -05:00
Steve Pulec
1709208872 First version of dashboard. 2017-03-11 22:45:42 -05:00
Steve Pulec
3b4ef2cf15 Merge in master. 2017-03-05 09:58:39 -05:00
Chris LaRose
56f9409ca9 Use request URL to generate SQS queue URLs; fixes #626 (#827) 2017-03-04 22:53:14 -05:00
Steve Pulec
f37bad0e00 Lints. 2017-02-23 21:37:43 -05:00
Brian Kruger
f212d70104 Use a sane aws sender_id from SQS. (#791) 2017-01-11 20:38:55 -05:00
Raghavendra D Prabhu
d07c646032 sqs: Use unix_time in place of time.time() (#787)
unix_time() from moto.core.utils is used as the time source through moto,
and it is identical to time.time() in output. Hence, using unix_time()
since it makes mocking easier during testing (when time is mocked out).
2017-01-11 20:35:56 -05:00
Raghavendra Prabhu
34a28b0fd5 Use region from ctor to set queue_arn.
Without this, any region passed to boto3.resource is ignored and unit
tests depending on it break.
2016-08-17 22:12:00 +01:00
macheins
ef8b6c1f28 Fix broken format of SQS QueueArn attribute 2016-07-19 14:15:16 +02:00
Matt Long
9b7902018f Respect VisibilityTimeout when calling receive_message
Previously, receive_message would always use the queue's default
visibility timeout instead of the value passed as a query parameter when
calling the receive_message method on an SQS connection.
2016-05-31 15:13:49 -07:00
Steve Pulec
a600deb96a Fix merge conflicts and add EC2 Instance delete. Closes #576. 2016-04-28 09:22:31 -04:00
Steve Pulec
63296049f1 More explicit SQS message checking. Closes #519. 2016-02-14 17:10:17 -05:00
Steve Pulec
705ec314a3 Cleanup different places using unix_time() 2015-11-27 14:14:40 -05:00
Andy Raines
76bce7954a Fixes #430: MD5 hashing should be done to the real body, not an escaped one 2015-10-05 14:14:56 +01:00
Steve Pulec
f72613cc47 Fix queue urls for other regions. Closes #411. 2015-09-19 09:18:16 -04:00
Dustin J. Mitchell
00e40c487e Return messages once they are gathered
If one or more messages are available, stop waiting and return them.
2015-08-31 11:27:42 -04:00
Jot
178d1c3a93 Added support for WaitTimeSeconds in SQS #392 2015-08-13 02:58:14 +02:00
Steve Pulec
53fff2eb84 Add UpdateStack functionality for Cloudformation. 2015-07-13 13:56:46 -04:00
Steve Pulec
0195e04053 Allow deleting of SQS invisible messages. Closes #352. 2015-05-29 23:26:43 -04:00
Steve Pulec
6b44e41249 Add SQS purge_queue action. Closes #349. 2015-05-29 23:21:14 -04:00
Steve Pulec
1f8253a1a1 Cleanup the default region backends. 2014-11-15 14:21:58 -05:00
Steve Pulec
bd847bd941 Cleanup multi-region support for ELB, SQS, Cloudformation, EC2, Autoscaling. 2014-11-15 13:34:52 -05:00
Steve Pulec
8bc8f09b47 Some flake8 cleanup. 2014-11-15 09:35:52 -05:00
Joseph Lawson
ff27ef9e91 XML escape body of sqs message body prior to encoding to XML 2014-10-22 16:05:26 -04:00
Joseph Lawson
20a69255c3 tweak Fn::GetAtt to return resource_json if resource is not implemented. DRY
This is better than failing out with a misleading Boto 400 error which should only happen when get_cfn_attribute is called but fails.
2014-10-21 14:51:26 -04:00
Joseph Lawson
1d9ffafaa5 create CloudFormation outputs and enable 'Fn::GetAtt' to work. 2014-10-21 12:45:03 -04:00
Ralfas
76aa9a8b22 Added basic support for SQS MessageAttributes. 2014-10-05 19:10:49 +01:00
Steve Pulec
ae2898b382 Merge pull request #181 from ghalib/create-existing-queue-noop
Creating a queue with existing name is now a no-op
2014-08-29 19:50:21 -04:00
Ghalib Suleiman
18bad6994d Creating a queue with existing name is now a no-op
This is more in line with Amazon's CreateQueue API
(http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html).

Previously, calling create_queue with a name that already existed
would cause moto to overwrite the existing queue with a new empty one.
2014-08-29 15:13:59 -06:00
David Baumgold
eedb4c4b73 Support Python 3 using six 2014-08-28 10:57:43 -04:00
David Baumgold
4201e6b430 from __future__ import unicode_literals 2014-08-27 11:33:55 -04:00
Clint Ecker
ca6a9bad4f use proper message encoding 2014-06-23 13:53:46 -05:00
Clint Ecker
a9ef2eaaf4 typos 2014-06-22 13:34:32 -05:00
Clint Ecker
049b73485f test changing visibility improperly 2014-06-20 16:29:40 -05:00
Clint Ecker
c18e0cc82e Enhanced SQS support
- Support for delaying messages
- Support for visibility timeouts
- Support for actually deleting messages
- Support for message bodies longer than 27 characters
- Support for message attributes
- Support for accurate queue attributes

Caveats:

- All message attributes are returned regardless of whether or not
attributes were requested when reading messages
- I’m not sure why messages longer than 27 characters were breaking in
my tests. Boto seems to expect the body to be base64 encoded and bodies
less than 27 characters would be fine, but if I attempted to use a
larger body it would mangle the content. I now base64 encode the body
if the raw string is longer than 27 characters and all is fine.
2014-06-20 15:00:36 -05:00
Steve Pulec
ef876dd27e Fix merge conflicts. Add basic cloudformation support. Closes #111. 2014-03-27 19:12:53 -04:00
Michael Ossareh
470ade25eb support QueueNamePrefix in the SQS Backend 2014-02-20 11:28:53 -08:00
Steve Pulec
74e2c19865 Cleanup unused imports 2013-12-29 08:40:38 -05:00
Steve Pulec
b8957e0c6e Stop using deprecated md5, switch to hashlib. Closes #36 2013-07-08 12:46:36 -04:00
Steve Pulec
3b52ba687d Merge pull request #25 from antimora/moto_23
Returning None in get_queue when not found. Closes spulec/moto#23
2013-04-27 14:54:03 -07:00
dilshod.tadjibaev
64baad79b0 Returning None in get_queue when not found. Closes spulec/moto#23 2013-04-24 00:54:23 -07:00
dilshod.tadjibaev
c9fb6f1cc1 Implemented remaining Queue attributes. This closes spulec/moto#22
The following attributes were added:

  - ApproximateNumberOfMessagesDelayed
  - ApproximateNumberOfMessagesNotVisible
  - CreatedTimestamp
  - DelaySeconds
  - LastModifiedTimestamp
  - MaximumMessageSize
  - MessageRetentionPeriod
  - QueueArn
  - ReceiveMessageWaitTimeSeconds
2013-04-24 00:50:41 -07:00
Steve Pulec
b03d48e6bc fixes to sqs encoding. Closes #4. 2013-03-23 09:44:53 -04:00
Steve Pulec
e993917d4c pep8 2013-03-05 08:35:18 -05:00