The AppScale Blog

Avatar

Open Source Google App Engine

AppScale is an open-source Platform-as-a-Service that automatically configures and deploys Google App Engine applications. It enables you to run App Engine apps on your own virtualized clusters (with KVM or VirtualBox) or on cloud infrastructures (with Amazon EC2 or Eucalyptus), without having to modify your App Engine apps.


On the AppScale blog, we report how AppScale integrates with popular software and runs it for you, so that you don't have to learn how to become an expert with each piece of software just to use it. Stay tuned to see what AppScale can do for you!


Recent Posts from the AppScale Team

AppScale at Google I/O

AppScale Systems will be presenting in the Developer Sandbox at Google I/O today! We're really excited to be there as one of Google's Cloud Technology partners and we've got a great demo for everyone to come check out.

If you're a Google App Engine developer or looking into developing on Google App Engine, we'd love to hear about your applications and use cases.

We've got our I/O crew T-shirts so we should be easy to spot - come drop by and say "hi"! Here's what the shirts look like:

AppScale 1.7.0 Released!

We're happy to announce the release of AppScale 1.7.0! After three weeks of development and two weeks of QA, we're happy to have fixed the following bugs and added the following features:


- System-level logging for admin user
- Fixed 'none' in database name, replication, and monitoring URL
- Speed up performance of AppDashboard
- Implement log levels for the AppController
- Prime AppDashboard before sending users to it
- Extend timeout from 30 to 60 minutes for images to boot in Eucalyptus.
- Add AppStats support for Python 2.7 App Engine apps.
- Refactor AppController's loging to not have everything at the DEBUG level.
- Namespacing now handled correctly by the datastore server.
- Uploading large apps from web UI now succeeds
- Updating login cookie at AppDashboard when apps are uploaded or deleted.
- Static secure files no longer lead to redirect loops.
- Channel API support for Java App Engine apps.
- Remove runtime checks for invalid Java classes from SDK.
- Mail API support for Java App Engine apps.
- AppDashboard now stores API status in Datastore
- AppController dying no longer kills the AppDashboard
- Resolved ndb deadlock issues with AppDashboard
- Fixed Cron API on Eucalyptus
- Altered build script to fail if any component fails to install
- Fixed 'appscale down' / terminate-instances when running on an AppScale image
- Apps can now be updated without first having to remove them
- Using Kazoo for ZooKeeper interactions, fixing NFS stale file handle errors
- Added EC2_SECRET_KEY and EC2_ACCESS_KEY args for AppScalefile
- Removed unused JavaScript files in AppDashboard
- 'verbose: False' now omits verbose flag in 'appscale up'
- Bulk loader now generates kind statistics
- Added bulk loader support for Java App Engine apps
- Java App Engine apps now support multithreading
- AppDashboard now uses graphical representations of numeric data
- Fixed XMPPReceiver, which broke with new AppDashboard implementation
- Cleaning up soft deleted items periodically
- ndb no longer sees memcache entries as corrupt
- Removed update SDK message from Java App Server
- Fixed bug where XMPP would fail for Java App Engine apps with capital letters in appid
- appscale.deploy now returns the host and port of the app that was deployed
- Enable AES support for apps that use pycrypto
- Properly adding lxml to dev_appserver's import path
- Removed AppDashboard's font references in CSS to files that don't exist
- Allow users to upload tar files with the app in a top-level directory
- When doing an 'appscale clean', we now remove local state in ~/.appscale
- Fixed starting AppScale on EC2 with a one node deployment, with --ips_layout
- Using retries when performing Kazoo operations with ZooKeeper
- appscale-upload-app now uses unique tempdir locations when uploading apps
- Uploading apps via web UI no longer throws 404s
- Large apps no longer timeout nginx when uploaded via the AppDashboard
- Using glob when importing Python libraries in dev_appserver
- Refreshing application names consistently in AppDashboard
- Caching AppController status at login node, resolving SOAP timeouts in Dashboard
- Improved stability for AppDashboard in Euca deployments


As usual, we have both the source and public AMI available. Here are some links:

The main source, at https://github.com/AppScale/AppScale
The tools source, at https://github.com/appscale/appscale-tools
A public Amazon EC2 ami, ami-b58be4dc (for the US East Region), and ami-adb1a7d9 (for the EU Ireland Region).

Links for KVM, VirtualBox, and Eucalyptus images can be found at http://downloads.appscale.com

We're heading off to Google I/O tomorrow through Friday, so we'll be prioritizing our product backlog to determine which issues to take on next week. Early next week, we'll add a Trello board (https://trello.com/appscalesystems), so join us and see what we're up to!

Of course, file any bugs you run into at https://github.com/AppScale/AppScale/issues for the main source and https://github.com/appscale/appscale-tools/issues for the tools source so that we can prioritize them and address them. You can also find us on #appscale on freenode if you run into problems or the like.

And as always, thanks for using AppScale!

Meet the Crew

It’s time to meet the crew. In the last 4 months we have conducted 220+ Market Validation calls, hardened our code for production, and now its time to come out from behind our monitors to introduce ourselves. 

Check out our Friday Video series.

Chandra presents an overview, AppScale  

Chris presents Open Process at AppScale 

Woody and Geert speak about Partnerships  

Raj talks about Production Ready Code 

Brian discuses how we Automated AppScale Testing

Hannah talks about outreach, Welcome to the Community 

There are a few more of us, namely Tyler, Jovan and myself who will be taped in the coming weeks.  

We’re off to I/O next week to present in the Developers Sandbox all day Thursday, May 16. If you are one of the lucky people who got a golden ticket - come by and say hi. - Margaret

Boston Big Data Meetup

    

    There was a Boston Hadoop User Group meetup on Thursday April 11th at the Hack/Reduce space in Cambridge. AppScale joined forces with Eucalyptus and Sqrrl to put on an exciting meetup. Harold Spencer Jr. from Eucalyptus did a presentation and demo about Big Data on the cloud using Ansible, RHadoop, AppScale, and AWS/Eucalyptus. Then, Adam Fuchs did a presentation about Sqrrl and Accumulo
    Over 70 people came out to hear these presentations. We had some enthusiastic R programmers in the house with lots of questions. There is certainly excitement about Big Data in Boston.
    The presentations were not filmed, but a blog post explaining the contents of the Big Data talk can be found here and the slides to the presentation can be found here.

    The best part of the night was being able to meet new friends. Can you guess who is behind the Sqrrl mask?

AppScale 1.6.9 Released!

Hi all,
   We're happy to announce the release of AppScale 1.6.9! After two weeks of development and one week of QA, we're happy to have fixed the following bugs:

- Cross group (XG) transactions for Python and Java App Engine apps
- Java XMPP support
- Spot instance support when running over Amazon EC2
- Automatic price estimation algorithm for spot instance support
- Robustness fixes for ZooKeeper interface
- Transactional task support for Python App Engine apps
- Memcache increment / decrement in Java App Engine
- Fixes for Python App Engine Channel API
- Have god monitor HAProxy
- NTP sync for VMs in AppScale deployments
- 'appscale deploy' now works for relative app paths
- Deferred task support
- Increased validation on AppScalefile
- Rebranded continue URL page
- "appscale clean" command, to terminate AppScale on all nodes
- Fixed "submit issue" button on dashboard
- Added support for environment variables in app.yaml files
- Starting AppMonitoring service in EC2 correctly

As usual, we have both the source and public AMI available. Here are some links:

The main source, at https://github.com/AppScale/AppScale
The tools source, at https://github.com/appscale/appscale-tools
A public Amazon EC2 ami, ami-4e472227

Links for KVM, VirtualBox, and Eucalyptus images can be found at http://downloads.appscale.com

We're continuing with two weeks of development and one week of QA for the next sprint, and are prioritizing our product backlog to determine the issues to tackle. For that release (1.7.0), we have a new Trello board (https://trello.com/board/1-7-0/515f17ce976f70e80e0049db), so join us and see what we're up to!

Of course, file any bugs you run into at https://github.com/AppScale/AppScale/issues for the main source and https://github.com/appscale/appscale-tools/issues for the tools source so that we can prioritize them and address them. You can also find us on #appscale on freenode if you run into problems or the like.

And as always, thanks for using AppScale!

How AppScale implements Transaction support


Introduction

AppScale provides support for pluggable databases, allowing users to run their Google App Engine applications with Cassandra as a backing store, and then to switch over to the same app running on HBase or Hypertable. To provide this pluggable database support, we provide a layer of abstraction between the App Server (which can be written in Python, Java, or Go) and the databases, which we call AppDB. This post explains how AppDB provides support for transactions while providing pluggable database support, and how we have extended it to support cross-group (XG) transactions in Google App Engine.

The Programming Model

The Google App Engine Datastore API lets users write Python, Java, or Go code to save and retrieve data. Let's start off with an example. First, we define a Model, representing a class we want to store in the Datastore:

class BlogComment(db.Model):
 text = db.StringProperty(required=True)

Here, our BlogComment has only one field, "text", which is a string. This isn't a new concept - ORM has been around for a while now, which is why it's nice that Google took this on instead of creating something drastically new. You can make a new BlogComment in your app by typing:

comment = BlogComment(key_name=key, text="hello") 

And this instantiated object is referred to as an Entity. Entities are organized into Entity Groups. Standard transactions within Google App Engine operate within a single entity group, so you could make an Entity Group for each BlogPost and put all the BlogComments for that post in that Group. Then, you could add and delete BlogComments for a single BlogPost within a transaction, but you can't operate on BlogComments across two BlogPosts within one transaction.

Now that you know what transactions look like to users, let's talk about how we make them work in AppScale.

Transaction Support

In AppScale, we want to provide transactions with the same semantics that Google App Engine provides, but for any database that our database-agnostic layer (AppDB) supports. To do this, we need to be able to atomically acquire and release locks, so we leverage ZooKeeper to do this for us.

Let's look at a transaction a user writes and see how this gets converted to calls to our database-agnostic layer. Suppose we have a transaction that retrieves a comment, changes its value, and stores it back in the Datastore:

def boo():
 comment1 = BlogComment.get_by_key_name("key1", blog_post)
 comment1.text = "new text"
 comment1.put()

db.run_in_transaction(boo)

This transaction gets reduced into the following steps:

  1. BeginTransaction (called when "run_in_transaction" starts)
  2. Zero or more Puts, Gets, Queries, or Deletes (called by the user's function).
  3. CommitTransaction (called when "run_in_transaction" ends)

Let's break down each of those steps from the AppDB point of view.

Step 1: BeginTransaction

Transactions are identified by the entity group that they operate on. AppDB begins by asking ZooKeeper for a sequential node (a node whose name ends in a monotonically increasing ID) with the following path:

/appscale/apps/appid/txn_ids/tx001

where "appid" is the name of the application we're running the transaction for, and "tx001" means this is the first transaction being performed (the "001" is sequentially given to us by ZooKeeper).

Step 2: Put, Get, Query, Delete

"BeginTransaction" sets up the ZooKeeper path for the transaction, but doesn't actually acquire any locks. We acquire locks in response to puts, gets, and deletes. When a put, get, query, or delete happens, AppDB looks at the entity group the operation is occurring on. If we don't have the lock for that entity group, we check the "lock path" for the transaction, located at:

/appscale/apps/appid/txn_ids/tx001/lockpath

If the lock path doesn't exist (which it doesn't for the first operation), then we create it and set its value to the entity group we're operating on. If the lock path does exist, we look at its value and see if it's the same as the entity group we're operating on. If it is, we have the entity group locked and can safely operate on it. If it isn't the same, then that means we're trying to operate on more than one entity group, which isn't allowed in the standard transaction model, so we rollback the transaction and abort it.

In our comment example, the "get_by_key_name" will call "get", which causes the lock path to be created and set to "key1". When the "put" happens, we look at the lock path, see that it exists and is set to "key1", and thus proceed with the "put" operation.

Step 3: CommitTransaction

Finally, the last step of a "db.run_in_transaction" is to commit the transaction. This is essentially the opposite of the "BeginTransaction" step, so we clean up all the transaction state we created earlier. We start by deleting the lock path from our transaction, as well as the sequential node we created earlier. Presuming that those delete operations succeed, we're good to go!

Omitted Details

For the sake of brevity and clarity, this example assumes that everything succeeded without any problems. We do implement rollback and transaction ID blacklisting for scenarios when there are problems acquiring ZooKeeper locks, or when a transaction tries to touch multiple entity groups. For the interested, we refer them to our detailed writeup on the transaction system.

Extending this for Cross-Group Transactions

Now that we've shown how AppScale implements transaction support within a single entity group, let's look at how we've expanded it to work on multiple entity groups (XG).

Let's look at a cross-group transaction a user writes and see how this gets converted to calls to our database-agnostic layer. Suppose we have a transaction that gets two comments, for two different blog posts, sets their values, and stores it back in the Datastore:

def boo():
 comment1 = BlogComment.get_by_key_name("key1", blog_post1)
 comment1.text = "new text 1"
 comment1.put()
 comment2 = BlogComment.get_by_key_name("key2", blog_post2)
 comment2.text = "new text 2"
 comment2.put()

xg_on = db.create_transaction_options(xg=True)
db.run_in_transaction_options(xg_on, boo)

Like before, this transaction gets reduced into the following steps:

  1. BeginTransaction
  2. Zero or more Puts, Gets, Queries, or Deletes
  3. CommitTransaction

Let's break down what we change in AppDB to support cross-group transactions.

Step 1: BeginTransaction

This step is mostly the same as before, but after we create the transaction path (with the sequential ID), we look in the BeginTransaction request and see if the user has specified "xg=True". If they have, we create a ZooKeeper node at the following path and set its value to True:

/appscale/apps/appid/txn_ids/tx001/is_xg

Step 2: Put, Get, Query, Delete

Datastore operations occur very similarly as before, but now, instead of there being a lock path, we change it to be a "lock list path", which instead of being a pointer to one entity group, is now a list of pointers to entity groups. The new path is called:

/appscale/apps/appid/txn_ids/tx001/lock_list_path

Like before, if the lock path doesn't exist (which it doesn't for the first operation), then we create it and set its value to the entity group we're operating on. If the lock path does exist, we look at its value and see if it's the same as the entity group we're operating on. If it is, we have the entity group locked and can safely operate on it. If it isn't the same, then we look at the "is_xg" node we set earlier. If it doesn't exist, we're not in a XG transaction and this isn't allowed, so we abort. If it does exist and is set to True, then we are in an XG transaction. We then look at the number of locks in the lock list and see how many locks have been acquired (Google App Engine limits you to 5 locks for XG transactions). If acquiring this lock would push us over the limit, we abort the transaction. Otherwise, we add it to the lock list and write the new list back to ZooKeeper.

In our example, the first "get_by_key_name" will call "get" , which causes the lock path to be created and set to "key1". When the first "put" happens, we look at the lock list path, see that it exists and is set to "key1", and thus proceed with the "put" operation. When the second "get_by_key_name" happens, we see that our entity group "key2" isn't in the lock list, but since "xg=True" is set, that's ok and we add "key2" to the lock list and proceed. The second "put" occurs, and we see that "key2" is in the lock list, so we proceed.

Step 3: CommitTransaction

This step is also similar to the non-XG version, but here, instead of deleting the lock path, we delete the lock list path. Presuming that those delete operations succeed, we're good to go!

Conclusion

So that's a quick writeup on how transactions work in AppScale. For the adventurous who are looking to operate on more than 5 entity groups at a time, check out "appscale/AppDB/zkappscale/zktransaction.py" and look for:

MAX_GROUPS_FOR_XG = 5

and change that to your heart's content :)

AppScale 1.6.8 Release Updates

Last week we released AppScale 1.6.8! It includes improved API fidelity for the XMPP API, so that your Google App Engine applications can send and receive instant messages, as well as a new TaskQueue implementation, which leverages the open source Celery project to distribute tasks across machines in your AppScale deployment. This release also comes with a new UI, courtesy once again of our UI/UX engineer Tyler. Download AppScale 1.6.8 and be sure to let us know what you think of it!
To Come in AppScale 1.6.9
For our next release, we've got a new Trello board that lets you know what we have slated for 1.6.9, when it's being worked on, and when it hits our testing branch, in case you want to grab it before we officially release. We've already added Spot Instance support when running in EC2, which can dramatically lower the price you pay for machines in Amazon. We're also slated to release Cross Group Transaction support for Python 2.5 and Python 2.7, so stay tuned!

AppScale 1.6.8 Released!

Hi all,
   We're happy to announce the release of AppScale 1.6.8! After three weeks of development and one week of QA, we're happy to have fixed the following bugs:

- Ordered ancestor queries
- Complex query fix for indexes with same name
- Obscured EC2 credentials in AppController log
- Turn off firewall when we turn off AppScale
- New TaskQueue client for Java
- Fixed XMPP API when running on EC2, Eucalyptus
- Fixed XMPP API for Python 2.7 App Engine
- Fixed errors using AppScale on complex deployments
- Rebranded AppLoadBalancer
- Fixes for distributed Task Queue system
- Restarting RabbitMQ if it fails to start up
- Restarting AppControllers on remote nodes if they fail to start
- Added pycrypto and lxml for use by App Engine apps
- Fixed timeout for RabbitMQ starting up to not be infinite
- Added deferred Task Queue support
- Replaced spymemcached with xmemcached for Java App Engine

As usual, we have both the source and public AMI available. Here are some links:

The main source, at https://github.com/AppScale/AppScale
The tools source, at https://github.com/appscale/appscale-tools
A public Amazon EC2 ami, ami-74fa641d

Links for KVM, VirtualBox, and Eucalyptus images can be found at http://downloads.appscale.com

We're continuing with two weeks of development and one week of QA for the next sprint, and are prioritizing our product backlog to determine the issues to tackle. For that release (1.6.9), we have a new Trello board (https://trello.com/board/1-6-9/513f57d7d9d10aba2d00351c), so join us and see what we're up to!

Of course, file any bugs you run into at https://github.com/AppScale/AppScale/issues for the main source and https://github.com/appscale/appscale-tools/issues for the tools source so that we can prioritize them and address them. You can also find us on #appscale on freenode if you run into problems or the like.

And as always, thanks for using AppScale!

This Week In AppScale, Issue 4

Hi all! This is our fourth issue of ' This Week in AppScale', our weekly newsletter that keeps you up-to-date on what's going on in the world of AppScale.


Release Updates:

We've switched from development mode to QA mode for AppScale 1.6.8. Check out our Trello board to see what we'll be releasing as part of AppScale 1.6.8, and how we're doing on QA'ing those features. We've got a revamped Task Queue implementation that leverages the open source celery project and also adds support for deferred tasks. On the more experimental side, we've been adding support for EC2 Spot Instances, so you can save money when deploying AppScale on EC2. Since one pain point there is figuring out how much to bid, we've added in an algorithm to automatically bid on your behalf based on previous successful Spot Instance bids.

Community Updates:

We had a great turnout at this week's office hours on #appscale - here's the transcript, where we talk about GitHub contributions and Ansible, a configuration / deployment management tool that we've been checking out to simplify our deployment process.

We've also been checking out Zapier, which we have automatically posting Trello cards to GitHub as new issues, to keep those in sync much better than before. We also have it automatically generating an RSS feed from recent Trello activity, so subscribe to it if you want to see what we're up to!

That wraps up issue #4 - thanks for reading!

This Week In AppScale, Issue 3

Hi all! This is our third issue of 'This Week in AppScale', our weekly newsletter that keeps you up-to-date on what's going on in the world of AppScale.

Release Updates:

We're hard at work on AppScale 1.6.8 - here's a Trello board that shows what we have slated for that release. We've got fixes in for advanced deployments in EC2 and Eucalyptus (where you can manually specify which machines you want to run API services) and improved timeout handling on the AppScale Tools side (so that it doesn't hang forever waiting for responses from the AppController). We fixed XMPP last week for Python 2.7 in VirtualBox, and I've got a pull open now to fix XMPP in EC2 and Eucalyptus as well. For the adventurous, you can always build our latest source on GitHub to get these features today. Thanks to our new bootstrap script, all you have to do to install AppScale is create a new virtual machine, and inside of it, run:

wget -O - http://bootstrap.appscale.com | sudo sh

Community Updates:

Last week we were at SCALE! Hannah (our community manager) and I gave a Birds of a Feather talk and got great feedback from you about how you'd use AppScale and what you'd want to use it for. I also gave an UpSCALE talk right after that to a packed room - thanks for all the support! 

shaon also wrote up a great blog post showing how to build an AppScale image on Eucalyptus from start to finish - thanks a ton shaon! I also wrote up a wiki on how to run AppScale on OpenStack and CloudStack. I also just tried it with Google Compute Engine yesterday and it works there too, so we should have a GCE image to give out for the 1.6.8 release :)

I also noticed that I forgot to send out the IRC Office Hours transcript this week - enjoy!

That wraps up issue #3 - thanks for reading!

This Week In AppScale - Issue 2

Hi all! This is our second issue of 'This Week in AppScale', our weekly newsletter that keeps you up-to-date on what's going on in the world of AppScale.


Release Updates:

We're hard at work on AppScale 1.6.8 - here's a Trello board that shows what we have slated for that release. We've already got XMPP fixed for Python 2.7 and are enabling pycrypto and lxml for Google App Engine apps, amongst many other features. For the adventurous, you can always build our latest source on GitHub to get these features today.

Community Updates:

Last night we kicked off the Santa Barbara Cloud Meetup group with our friends at Eucalyptus at our office in downtown SB. Thanks for the huge turnout - we've never had that many people at the office before and were almost overflowing with support! Join our meetup group if you're nearby and be sure to come visit us again for our next meetup!

This week we're at SCALE! Come meet me and Hannah, our community manager, and say 'hi!'. If you're there today, we're doing a Birds-of-a-Feather talk in the Carmel room at 7pm, as well as a lightning talk at UpSCALE at the La Jolla room at 8pm. For the other days, we'll be wandering around the community talks, so don't be a stranger! We'll also be posting on Twitter as @appscalecloud, so follow us for updates throughout the weekend!

That wraps up issue #2 - thanks for reading!

This Week In AppScale - Issue 1

Hi all! This is our first issue of 'This Week in AppScale', our weekly newsletter that keeps you up-to-date on what's going on in the world of AppScale.


Release Updates:

This week we released AppScale 1.6.7! We have a CHANGELOG that details all of the features we released, but the big one is that we had a bit of code smell in the AppScale Tools, so we took this time to rewrite them in Python and clean them up a lot. We've now got code coverage on 87% of the new tools, and have the tools almost completely PyDoc'ed!

You can check out our release at download.appscale.com, with newly uploaded images for KVM and Eucalyptus 3.2. We also have images for VirtualBox and a public EC2 AMI, as well as the source (if you're looking to build an image from scratch).

Website Updates:

Our long-running countdown finally hit zero this week, so with AppScale 1.6.7 we went live with our main website, www.appscale.com. Check it out and let us know what you think!

Community Updates:

We also took this time to launch our community-focused website, at community.appscale.com. Here, we've got links to our GitHub source, YouTube videos, and our Trello board, containing all the features we're looking to fix in AppScale 1.6.8.

On that note, we also got an awesome pull request from yep on github, which adds a build script for the AppScale Tools on Mac OS X. yep also wrote up documentation on how to get it going - thanks a ton yep!

That wraps up our inaugural AppScale update - thanks for reading!

AppScale 1.6.7 Released!

Hi all,
   We're happy to announce the release of AppScale 1.6.7! After two weeks of development and one weeks of QA, we're happy to have fixed the following bugs:

- AppScale Tools rewritten in Python
- Terminate script kills Erlang processes
- Fixed HTTP -> HTTPS redirection issues
- Add support for JDO and JPA
- Properly encoding memcache keys with spaces in it
- Fixed Java memcache inconsistencies in a distributed environment
- Changed nginx config file construction to support regexes

As usual, we have both the source and public AMI available. Here are some links:

The main source, at https://github.com/AppScale/AppScale
The tools source, at https://github.com/appscale/appscale-tools
A public Amazon EC2 ami, ami-167fee7f

Links for KVM, VirtualBox, and Eucalyptus images can be found at http://downloads.appscale.com

We're continuing with two weeks of development and one week of QA for the next sprint, and are prioritizing our product backlog to determine the issues to tackle. For that release (1.6.8), we're trying out a Trello board (https://trello.com/board/1-6-8/5119884f4c06d0c0600005d1), so join us and see what we're up to! In particular, we've noticed the following issues in this sprint that we're looking to tackle:


- Advanced deployments have issues on Eucalyptus 3.2
- HBase / AppDB integration performs unreliably
- Fix XMPP API on Python 2.5 and Python 2.7
- Remove use of EC2 and Euca2ools from AppController (since the InfrastructureManager is responsible for VMs)

Of course, file any bugs you run into at https://github.com/AppScale/AppScale/issues for the main source and https://github.com/appscale/appscale-tools/issues for the tools source so that we can prioritize them and address them. You can also find us on #appscale on freenode if you run into problems or the like.

And as always, thanks for using AppScale!

AppScale 1.6.6 Released!

We're happy to announce the release of AppScale 1.6.6! After two weeks of development and two weeks of QA, we're happy to have fixed the following bugs:

- Support Python 2.7 App Engine apps
- Fixed ACID semantics for transactions
- Add nodes dynamically to a running AppScale deployment
- SSL support for App Engine apps
- Upgrade nginx to latest stable version and include HTTP chunking support
- AppController revives properly after being killed
- Cookies do not get created in certain deployment types
- Cookies do not get deleted if > 1 eth device present
- Turn on HRD flag in Python AppServer
- Added AppScalefile support, making it easier to run AppScale
- Add in 'appscale logs' command to automatically collect log files
- Add in 'appscale tail' command to automatically tail log files
- Add in 'appscale down' to alias to 'appscale destroy'
- Add in 'appscale ssh' to ssh to AppScale VMs
- Added Watchfile for continuous testing support
- Remove binary from beginning of locations.yaml file
- Start unrelated API services in parallel to improve startup time
- Make tools print version number on startup
- Fix bulkloader to support batching
- Python and Java API fidelity testing apps (Hawkeye)
- Obscuring EC2 credentials after a regression exposed them

As usual, we have both the source and public AMI available. Here are some links:

The main source, at https://github.com/AppScale/AppScale
The tools source, at https://github.com/appscale/appscale-tools
A public Amazon EC2 ami, ami-0936bd60

Links for Xen, VirtualBox, and Eucalyptus images can be found at http://downloads.appscale.com

We're continuing with two weeks of development and one week of QA for the next sprint, and are prioritizing our product backlog to determine the issues to tackle. For that release (1.6.7), we're trying out a Trello board (https://trello.com/board/1-6-7/50f5bb310ba122ea1e000db7), so join us and see what we're up to!

Of course, file any bugs you run into at https://github.com/AppScale/AppScale/issues for the main source and https://github.com/appscale/appscale-tools/issues for the tools source so that we can prioritize them and address them. You can also find us on #appscale on freenode if you run into problems or the like.

And as always, thanks for using AppScale!

AppScale 1.6.5 Released!

We're happy to announce the release of AppScale 1.6.5! After two weeks of development and one week of QA, we're happy to have fixed the following bugs:

  • Update Java AppServer to 1.7.3
  • Update Python AppServer to 1.7.3
  • Make bulkloader work with AppScale (docs here)
  • AppScale fails to start if eth0's IP is not externally accessible
  • NeptuneManager no longer starts up correctly
  • AppController should validate AppScale version
  • Firewall needs to be on
  • Hypertable does not start when db_master != node1
  • Tools do not validate ami/emi in cloud deployments
  • Tools should warn users on unsupported deployments
  • Updating locations metadata file after arg validation
  • Enable use of m1.medium instance type on EC2
  • Tools should validate AppScale version
  • Tools report EC2_ACCESS_KEY and EC2_SECRET_KEY to standard out
  • Tools can fail to start AppController
  • Tools do not fail if no network tags are free

  • As usual, we have both the source and public AMI available. Here are some links:

    The main source, at https://github.com/AppScale/AppScale
    The tools source, at https://github.com/appscale/appscale-tools
    A public Amazon EC2 ami, ami-0d21ac64

    And here are links for Xen, KVM, and Eucalyptus images:

    Xen - http://appscale.cs.ucsb.edu/appscale_files/appscale-1.6.5-xen.tar.gz
    KVM - http://appscale.cs.ucsb.edu/appscale_files/appscale-1.6.5-kvm.tar.gz
    Eucalyptus 3 - http://appscale.cs.ucsb.edu/appscale_files/appscale-1.6.5-euca.tar.gz

    We're continuing with two weeks of development and two weeks of QA for the next sprint, and are prioritizing our product backlog to determine the issues to tackle. For that release (1.6.6), we're trying out a Trello board (https://trello.com/board/1-6-6/50cb80d9e1f88b1077007a17), so join us and see what we're up to!

    Of course, file any bugs you run into at https://github.com/AppScale/AppScale/issues for the main source and https://github.com/appscale/appscale-tools/issues for the tools source so that we can prioritize them and address them. You can also find us on #appscale on freenode if you run into problems or the like.

    And as always, thanks for using AppScale!