<div dir="ltr"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" id="gmail-docs-internal-guid-3318e41a-45d1-c01b-0d73-4da9a28aa1c3"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Hello all,</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">I would like to start to describe some design decisions we made in Glare code (</span><a href="https://review.openstack.org/#/q/topic:bp/glare-api+status:open" style="text-decoration:none"><span style="font-size:14.6667px;font-family:arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">https://review.openstack.org/#/q/topic:bp/glare-api+status:open</span></a><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">).  If you are not familiar with Glare I suggest you to read the following spec:</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><a href="https://github.com/openstack/glance-specs/blob/master/specs/newton/approved/glance/glare-api.rst" style="text-decoration:none"><span style="font-size:14.6667px;font-family:arial;color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">https://github.com/openstack/glance-specs/blob/master/specs/newton/approved/glance/glare-api.rst</span></a></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">I hope it will help other folks to understand Glare approach and provide some constructive feedback for Glare. I think that we can also use Glare solution for Glance in near future to address some drawbacks we have in Glance.</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:center"><span style="font-size:18.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Glare locations</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Glance and Glare have possibility to set some external url as image(artifact) location. This feature is quite useful for users who would like to refer to some external image or artifact (for example, Fedora image on official Fedora site) and not to store this image or artifact in the cloud.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">External locations in Glance have several specialities:</span></p><ol style="margin-top:0pt;margin-bottom:0pt"><li dir="ltr" style="list-style-type:decimal;font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">It is possible to setup multiple locations for an image. Glance uses special location strategy to define which location to use. This strategy defined in glance codebase and can be configured in glance conf.</span></p></li><li dir="ltr" style="list-style-type:decimal;font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Glance doesn’t differ image locations specified by url and image locations uploaded to Glance backend. Glance has some restrictions about which urls to use for locations (see Glance docs for more info).</span></p></li></ol><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Glare external locations designed in different way to address some drawbacks we have in Glance. So the approach is the following:</span></p><ol style="margin-top:0pt;margin-bottom:0pt"><li dir="ltr" style="list-style-type:decimal;font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Glare doesn’t support multiple locations, you can specify dict of blobs in artifact type and add url for each blob in dict. User must define a name(f.e. region name or priority) for blob in dict and this name can be used to retrieve this blob from artifact. So decision about which location to use will be outside of Glare.</span></p></li><li dir="ltr" style="list-style-type:decimal;font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Glare adds a special flag to database for external locations. So they will be treated differently in Glare when delete artifact. If blob value is external url then we don’t need to pass this url to backend and just delete the record in DB. For now, Glare allows only http(s) locations set but it may be extended in future but the idea still the same: external location are just records in DB.</span></p></li><li dir="ltr" style="list-style-type:decimal;font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Glare saves blob size and checksum when specifying external url. When user specified url Glare downloads the blob by url, calculates its size and checksum. Of course, it leads to some performance degradation but we can ensure that the external blob is immutable. We made this because security seems more important for Glare than performance. Also there are plans to extend this approach to support subscriptions for external locations so we can increase secureness of that operation. </span></p></li></ol><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">I think that some of the features above can be implemented in Glance. For example, we can treat our locations as only read-only links if external flag will be implemented.  It will allow us to ensure that only blobs uploaded through the Glance will be managed. </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">Additionally, if we will calculate checksum and size for external urls, we can ensure that  all multiple locations refers to the same blob. So management of multiple locations(deletion/creation) can be more secure. Also we can ensure that the external url blob was not changed. </span></p><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline">I understand that we need a spec for that but I would like to discuss this at high level first. Here is etherpad for discussion: <a href="https://etherpad.openstack.org/p/glare-locations">https://etherpad.openstack.org/p/glare-locations</a></span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:14.6667px;font-family:arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline"></span><br></p><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr">Best regards,<div>Kairat Kushaev</div></div></div></div></div></div>
</div>