惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
L
LangChain Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
Y
Y Combinator Blog
月光博客
月光博客
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
小众软件
小众软件
H
Help Net Security
Last Week in AI
Last Week in AI
B
Blog RSS Feed
宝玉的分享
宝玉的分享
N
Netflix TechBlog - Medium
博客园 - 叶小钗
The GitHub Blog
The GitHub Blog

OpenStack

现在还有人在用 openstack 吗 请教! openstack Train 版本 偶尔启动 windows server 2019 系列,会卡在启动界面,硬重启几次偶尔会启动成功,但失败次数较多。 关于 openstack 组件的流量走向图查询的问题 OpenStack Neutron 的开发者们,他们写这么绕的逻辑自己不晕么? 想用 openstack 做虚拟化,哪个版本相对比较稳定点? 一文读懂 StarlingX 找一个熟悉 openstack 的做有偿技术顾问 OpenStack Swift 复制问题 centos7 两行命令快速部署 ceph 多节点 (devstack 挂服务) Centos Openstack Liberty 单网卡配置 OpenStack packstack 安装的时候报错 有人了解 openstack 的 taas 服务么 基于 Kubernetes 和 OpenStack 的开源项目在物联网的应用 devstack 安装 疑惑 求助关于 openstack 开发一个资源自助系统的思路 国内的新兴云服务是不是都是以 openstack 为基础的云平台? Red Hat OpenStack 官方培训笔记 推荐简单点的虚拟机网页管理的开源程序 做 openstack 二次开发有相关的技术文章邮件订阅吗? OpenStack 里面 Windows 虚拟机无法上网 ZStack: CloudStack 核心人员推出的新开源 IaaS 项目 OpenStack 和 SaaS 有什么关系么? opensatcke 下 selinux 的文件配置问题 试了一下 RDO,请教下当实例起来后,分配到私有 ip,默认是 10.0.0.x,这个时候宿主机能 ping 通这个地址吗? 大家有谁成功部署过 OpenContrail 么? 这句英文应该怎么理解? openstack 可以把多个物理机变成一个虚拟机? OpenStack 安装 keystone,启动服务失败 [轻喷] OpenStack 的愿景 Pre-Built OpenStack Images
openstack rocky 版本 多后端存储支持 保存镜像失败
firejoke · 2018-12-24 · via OpenStack

官方文档Multi Store Support

官方说在 rocky 版本是作为实验功能引入,

参考后的配置(/etc/glance/glance-api.conf)

[DEFAULT]
...
enabled_backends = reliable:file, fast:rbd
...

[glance_store]
default_backend = reliable

[reliable]
filesystem_store_datadir = /opt/stack/data/glance/images/
store_description = "Reliable filesystem backend"

[fast]
store_description = "Fast rbd backend"
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8
rados_connect_timeout = 0

[os_staging]
filesystem_store_datadir = /opt/stack/data/glance/os_staging/
store_description = "Filesystem store for staging purpose"

源码内判断后端存储位置的代码(glance/glance/api/v2/image_data.py class ImageDataController)

...
...
    @utils.mutating
    def upload(self, req, image_id, data, size):
        backend = None
        if CONF.enabled_backends:
            backend = req.headers.get('x-image-meta-store',
                                      CONF.glance_store.default_backend)

            try:
                LOG.debug(" = = = = = = backend: %s = = = = = = " % backend)
                glance_store.get_store_from_store_identifier(backend)
                LOG.debug("glance_store.backend %s" % glance_store.backend)
            except glance_store.UnknownScheme as exc:
                raise webob.exc.HTTPBadRequest(explanation=exc.msg,
                                               request=req,
                                               content_type='text/plain')

        image_repo = self.gateway.get_repo(req.context)
        image = None
        refresher = None
        cxt = req.context
        try:
            self.policy.enforce(cxt, 'upload_image', {})
            image = image_repo.get(image_id)
            image.status = 'saving'
            try:
                if CONF.data_api == 'glance.db.registry.api':
                    # create a trust if backend is registry
                    try:
                        # request user plugin for current token
                        user_plugin = req.environ.get('keystone.token_auth')
                        roles = []
                        # use roles from request environment because they
                        # are not transformed to lower-case unlike cxt.roles
                        for role_info in req.environ.get(
                                'keystone.token_info')['token']['roles']:
                            roles.append(role_info['name'])
                        refresher = trust_auth.TokenRefresher(user_plugin,
                                                              cxt.tenant,
                                                              roles)
                    except Exception as e:
                        LOG.info(_LI("Unable to create trust: %s "
                                     "Use the existing user token."),
                                 encodeutils.exception_to_unicode(e))

                image_repo.save(image, from_state='queued')
                image.set_data(data, size, backend=backend)

                try:
                    image_repo.save(image, from_state='saving')
                except exception.NotAuthenticated:
                    if refresher is not None:
                        # request a new token to update an image in database
                        cxt.auth_token = refresher.refresh_token()
                        image_repo = self.gateway.get_repo(req.context)
                        image_repo.save(image, from_state='saving')
                    else:
                        raise

                try:
                    # release resources required for re-auth
                    if refresher is not None:
                        refresher.release_resources()
                except Exception as e:
                    LOG.info(_LI("Unable to delete trust %(trust)s: %(msg)s"),
                             {"trust": refresher.trust_id,
                              "msg": encodeutils.exception_to_unicode(e)})
...
...

目前请求头并没有 x-image-meta-store 属性,直接按默认的 reliable 后端配置来

相关日志:

12 月 24 15:59:25 controller [email protected][6524]: DEBUG glance.api.v2.image_data [None req-081110c4-8d29-4567-a4fb-bbbc7313efbf alt_demo admin]  = = = = = = backend: reliable = = = = = =  {{(pid=6527) upload /opt/stack/glance/glance/api/v2/image_data.py:127}}
12 月 24 15:59:25 controller [email protected][6524]: DEBUG glance.api.v2.image_data [None req-081110c4-8d29-4567-a4fb-bbbc7313efbf alt_demo admin] glance_store.backend <module 'glance_store.backend' from '/usr/lib/python2.7/site-packages/glance_store/backend.pyc'> {{(pid=6527) upload /opt/stack/glance/glance/api/v2/image_data.py:129}}
......
12 月 24 15:59:26 controller [email protected][6524]: DEBUG glance_store._drivers.filesystem [None req-081110c4-8d29-4567-a4fb-bbbc7313efbf alt_demo admin] Wrote 0 bytes to /opt/stack/data/glance/images/9da337be-bb04-43af-ac1d-b9e5a15a0c70 with checksum d41d8cd98f00b204e9800998ecf8427e and multihash cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e {{(pid=6527) add /usr/lib/python2.7/site-packages/glance_store/_drivers/filesystem.py:728}}
12 月 24 15:59:27 controller [email protected][6524]: DEBUG glance_store.multi_backend [None req-081110c4-8d29-4567-a4fb-bbbc7313efbf alt_demo admin] Skipping store.set_acls... not implemented {{(pid=6527) set_acls_for_multi_store /usr/lib/python2.7/site-packages/glance_store/multi_backend.py:439}}
......

在 http 上传缓存目录能找到上传成功的文件,但在从缓存目录写入到 image 目录时,但写入数据就变成了 Wrote 0 bytes

可能是最近比较浮躁

一直跑流程也还是找不到为什么

请求能有大大指点一二