Use glance_store to save generated fractal images

Change-Id: I57e1a01af9fd96a5ed201441e274e2a6b49eb5ed
This commit is contained in:
Christian Berendt 2015-03-26 12:09:55 +01:00
parent ec790a3bed
commit 6f2dace98b
4 changed files with 33 additions and 19 deletions

View File

@ -1,5 +1,8 @@
[DEFAULT] [DEFAULT]
filesystem_store_datadir = /home/vagrant
transport_url = rabbit://faafo:secretsecret@localhost:5672/ transport_url = rabbit://faafo:secretsecret@localhost:5672/
verbose = True verbose = True
[glance_store]
default_store = file
filesystem_store_datadir = /home/vagrant

View File

@ -22,9 +22,12 @@
- copy: src=files/{{ item }} dest=/home/vagrant/{{ item }} mode=0755 owner=vagrant group=vagrant - copy: src=files/{{ item }} dest=/home/vagrant/{{ item }} mode=0755 owner=vagrant group=vagrant
with_items: with_items:
- api.conf
- producer.conf
- run_api.sh - run_api.sh
- run_producer.sh - run_producer.sh
- run_worker.sh - run_worker.sh
- copy: src=files/{{ item }} dest=/home/vagrant/{{ item }} mode=0644 owner=vagrant group=vagrant
with_items:
- api.conf
- producer.conf
- worker.conf - worker.conf

View File

@ -22,8 +22,10 @@ import os
from PIL import Image from PIL import Image
import random import random
import socket import socket
import tempfile
import time import time
import glance_store
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log from oslo_log import log
import oslo_messaging as messaging import oslo_messaging as messaging
@ -33,15 +35,6 @@ from faafo import version
LOG = log.getLogger('faafo.worker') LOG = log.getLogger('faafo.worker')
worker_opts = [
cfg.StrOpt('filesystem_store_datadir',
default='/tmp',
help='Directory that the filesystem backend store writes '
'fractal image files to.'),
]
cfg.CONF.register_opts(worker_opts)
class JuliaSet(object): class JuliaSet(object):
@ -71,8 +64,10 @@ class JuliaSet(object):
self.image.putpixel((x, y), self.image.putpixel((x, y),
(i % 8 * 32, i % 16 * 16, i % 32 * 8)) (i % 8 * 32, i % 16 * 16, i % 32 * 8))
def save(self, filename): def get_file(self):
self.image.save(filename, "PNG") with tempfile.NamedTemporaryFile(delete=False) as fp:
self.image.save(fp, "PNG")
return fp.name
def _set_point(self): def _set_point(self):
random.seed() random.seed()
@ -104,20 +99,26 @@ class WorkerEndpoint(object):
task['ya'], task['ya'],
task['yb'], task['yb'],
task['iterations']) task['iterations'])
filename = os.path.join(cfg.CONF.filesystem_store_datadir,
"%s.png" % task['uuid'])
elapsed_time = time.time() - start_time elapsed_time = time.time() - start_time
LOG.info("task %s processed in %f seconds" % LOG.info("task %s processed in %f seconds" %
(task['uuid'], elapsed_time)) (task['uuid'], elapsed_time))
juliaset.save(filename)
LOG.info("saved result of task %s to file %s" % filename = juliaset.get_file()
(task['uuid'], filename)) LOG.debug("saved result of task %s to temporary file %s" %
(task['uuid'], filename))
with open(filename, 'rb') as fp:
size = os.fstat(fp.fileno()).st_size
glance_store.add_to_backend(cfg.CONF, task['uuid'], fp, size)
checksum = hashlib.sha256(open(filename, 'rb').read()).hexdigest() checksum = hashlib.sha256(open(filename, 'rb').read()).hexdigest()
LOG.debug("checksum for task %s: %s" % (task['uuid'], checksum))
os.remove(filename)
result = { result = {
'uuid': task['uuid'], 'uuid': task['uuid'],
'duration': elapsed_time, 'duration': elapsed_time,
'checksum': checksum 'checksum': checksum
} }
return result return result
@ -125,6 +126,8 @@ def main():
log.register_options(cfg.CONF) log.register_options(cfg.CONF)
log.set_defaults() log.set_defaults()
glance_store.register_opts(cfg.CONF)
cfg.CONF(project='worker', prog='faafo-worker', cfg.CONF(project='worker', prog='faafo-worker',
version=version.version_info.version_string()) version=version.version_info.version_string())
@ -138,6 +141,10 @@ def main():
] ]
server = messaging.get_rpc_server(transport, target, endpoints, server = messaging.get_rpc_server(transport, target, endpoints,
executor='eventlet') executor='eventlet')
glance_store.create_stores(cfg.CONF)
glance_store.verify_default_store()
server.start() server.start()
try: try:
server.wait() server.wait()

View File

@ -10,3 +10,4 @@ flask-restless
oslo.config>=1.9.3,<1.10.0 # Apache-2.0 oslo.config>=1.9.3,<1.10.0 # Apache-2.0
oslo.log>=1.0.0,<1.1.0 # Apache-2.0 oslo.log>=1.0.0,<1.1.0 # Apache-2.0
oslo.messaging>=1.8.0,<1.9.0 # Apache-2.0 oslo.messaging>=1.8.0,<1.9.0 # Apache-2.0
glance_store>=0.3.0 # Apache-2.0