)]}'
{"specs/juno/artifact-repository.rst":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"To enable a plugin the cloud operator has to place the python module into"},{"line_number":123,"context_line":"the appropriate directory of the node which runs Glance and make appropriate"},{"line_number":124,"context_line":"changes into the configuration files."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Only the types from explicitly enabled plugins are available for usage."},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f104d91a","line":124,"updated":"2014-06-25 13:58:32.000000000","message":"IMO, we\u0027d better mention this as well as a deployer impact and probably doc impact item, to tell deployer how to prepare, configure and enable artifact plugin.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"To enable a plugin the cloud operator has to place the python module into"},{"line_number":123,"context_line":"the appropriate directory of the node which runs Glance and make appropriate"},{"line_number":124,"context_line":"changes into the configuration files."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Only the types from explicitly enabled plugins are available for usage."},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_acdd5ddf","line":124,"in_reply_to":"1ae5cdf2_f104d91a","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":237,"context_line":"     - Time when the artifact was deleted, i.e. moved from CREATING or"},{"line_number":238,"context_line":"       PUBLISHED state to DELETED. Is empty for artifacts not in DELETED"},{"line_number":239,"context_line":"       state"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"**Type-specific metadata fields**"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"For each type of artifact, additional metadata fields may be defined."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_18e08225","line":240,"updated":"2014-06-25 13:58:32.000000000","message":"Do we need a field to save an identifier to indicates which version of particular plugin (\u0027Type\u0027 provided) created or is maintaining this artifact? e.g. a version string of plugin with SemVer notation format. This could be used for artifact migration if the new installed plugin could not be able to keep backward-compatible smoothly for those existing artifacts, or doing any change on artifact records when a (new) plugin been initialized to execute update/fixing scan.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":237,"context_line":"     - Time when the artifact was deleted, i.e. moved from CREATING or"},{"line_number":238,"context_line":"       PUBLISHED state to DELETED. Is empty for artifacts not in DELETED"},{"line_number":239,"context_line":"       state"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"**Type-specific metadata fields**"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"For each type of artifact, additional metadata fields may be defined."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_0c3731ff","line":240,"in_reply_to":"1ae5cdf2_18e08225","updated":"2014-06-26 12:48:16.000000000","message":"Great idea, thanks. I\u0027ve added a \"TypeVersion\" field above.\nHowever, I\u0027d suggest to postpone the actual implementation of the artifact migrations till the later cycles. I think these migrations may be added as a separate blueprint spec.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":246,"context_line":"Each type-specific metadata field is represented by a data structure having"},{"line_number":247,"context_line":"the following properties:"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* **Field name** - alphanumeric value identifying the field. Should be unique"},{"line_number":250,"context_line":"  per artifact type"},{"line_number":251,"context_line":"* **Field type** - a type of the data stored in the field. Identifies the"},{"line_number":252,"context_line":"  types of queries which may be made to search and filter the artifacts in"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_33e72148","line":249,"updated":"2014-06-25 13:58:32.000000000","message":"\u003e\u003e\u003e Should be unique per artifact type\n\nDo we allow multiple plugins define/extend one artifact with same type? I believe the answer is no right? (otherwise this point will has problem) Can you elaborate on this at **Artifact plugin** section (line #116).","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":246,"context_line":"Each type-specific metadata field is represented by a data structure having"},{"line_number":247,"context_line":"the following properties:"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* **Field name** - alphanumeric value identifying the field. Should be unique"},{"line_number":250,"context_line":"  per artifact type"},{"line_number":251,"context_line":"* **Field type** - a type of the data stored in the field. Identifies the"},{"line_number":252,"context_line":"  types of queries which may be made to search and filter the artifacts in"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_176adab4","line":249,"in_reply_to":"1ae5cdf2_33e72148","updated":"2014-06-26 12:48:16.000000000","message":"Right. This should be enforced at the moment when the plugin is being loaded (i.e. there may be inactive plugins which define the same type, but only one may be active at any given moment).\nI\u0027ve added appropriate description.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":272,"context_line":"  specified for the artifact to be valid."},{"line_number":273,"context_line":"* **Mutable** - boolean value indicating if the field value may be changed"},{"line_number":274,"context_line":"  after the artifact is published."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"**Artifact Versions**"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_736b69f1","line":275,"updated":"2014-06-25 13:58:32.000000000","message":"What about adding an \"internal\" boolean field to indicates if this field of artifact is an inside value which could be used for plugin/glance internally instead of end user externally, e.g. showing and querying, something like the \u0027metadata\u0027 of artifact metadata .","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":272,"context_line":"  specified for the artifact to be valid."},{"line_number":273,"context_line":"* **Mutable** - boolean value indicating if the field value may be changed"},{"line_number":274,"context_line":"  after the artifact is published."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"**Artifact Versions**"},{"line_number":278,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_d79a32c4","line":275,"in_reply_to":"1ae5cdf2_736b69f1","updated":"2014-06-26 12:48:16.000000000","message":"Hm.. nice idea. Will add this.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":309,"context_line":"inserted into the database), it is in the CREATING state (see the “Artifact"},{"line_number":310,"context_line":"Lifecycle” section below) and has no binary data associated. Then - before"},{"line_number":311,"context_line":"publishing the artifact - its owner may upload the data by using the"},{"line_number":312,"context_line":"appropriate API calls. The BLOBs will be placed into the storage system (the"},{"line_number":313,"context_line":"one which is being used for the particular instance of Glance) and associated"},{"line_number":314,"context_line":"with the the artifact record by using its id."},{"line_number":315,"context_line":"When the artifact repository is browsed, only the artifact metadata is"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f72a042e","line":312,"updated":"2014-06-25 13:58:32.000000000","message":"\u003e\u003e\u003e \tappropriate API calls\n\nPlease add a link here when the API stuff ready.\n\nAnd I\u0027m still looking forward to see API idea/spec as I said at Atlanta with you, thanks.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":309,"context_line":"inserted into the database), it is in the CREATING state (see the “Artifact"},{"line_number":310,"context_line":"Lifecycle” section below) and has no binary data associated. Then - before"},{"line_number":311,"context_line":"publishing the artifact - its owner may upload the data by using the"},{"line_number":312,"context_line":"appropriate API calls. The BLOBs will be placed into the storage system (the"},{"line_number":313,"context_line":"one which is being used for the particular instance of Glance) and associated"},{"line_number":314,"context_line":"with the the artifact record by using its id."},{"line_number":315,"context_line":"When the artifact repository is browsed, only the artifact metadata is"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f73bae99","line":312,"in_reply_to":"1ae5cdf2_f72a042e","updated":"2014-06-26 12:48:16.000000000","message":"Working on this. Will be ready soon.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":313,"context_line":"one which is being used for the particular instance of Glance) and associated"},{"line_number":314,"context_line":"with the the artifact record by using its id."},{"line_number":315,"context_line":"When the artifact repository is browsed, only the artifact metadata is"},{"line_number":316,"context_line":"returned: the data objects for each specific artifact have to be downloaded"},{"line_number":317,"context_line":"separately, by sending an appropriate API calls."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"Unlike the current Glance Images, a single artifact may have more then one"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_97caa044","line":316,"updated":"2014-06-25 13:58:32.000000000","message":"I still like glance be able to expose \u0027direct_url/location\u0027 of artifact data to client, like what we did for image service currently  - \u0027direct_url\u0027 mechanism, it allows client consume data from backend storage directly with particular optimized approach, instead of to download data by http in any case.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":313,"context_line":"one which is being used for the particular instance of Glance) and associated"},{"line_number":314,"context_line":"with the the artifact record by using its id."},{"line_number":315,"context_line":"When the artifact repository is browsed, only the artifact metadata is"},{"line_number":316,"context_line":"returned: the data objects for each specific artifact have to be downloaded"},{"line_number":317,"context_line":"separately, by sending an appropriate API calls."},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"Unlike the current Glance Images, a single artifact may have more then one"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_d7a072a7","line":316,"in_reply_to":"1ae5cdf2_97caa044","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":333,"context_line":"the “Import” operation to upload all at once, see “Artifact import” section"},{"line_number":334,"context_line":"below), specifying their types every time. If some required blob is not"},{"line_number":335,"context_line":"uploaded, the \"publishing check\" will not pass and the artifact will not be"},{"line_number":336,"context_line":"accepted into the repository. So, in general, this is similar to specifying"},{"line_number":337,"context_line":"the values of additional type-specific metadata fields."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"For each artifact type its plugin defines the BLOBs supported by this"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_776b541f","line":336,"updated":"2014-06-25 13:58:32.000000000","message":"The \"publishing check\" will be handled by plugin right (iirc)? pls mention it here.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b45d412f14db15aac2aa78b42dab2e9838cdbe9d","unresolved":false,"context_lines":[{"line_number":333,"context_line":"the “Import” operation to upload all at once, see “Artifact import” section"},{"line_number":334,"context_line":"below), specifying their types every time. If some required blob is not"},{"line_number":335,"context_line":"uploaded, the \"publishing check\" will not pass and the artifact will not be"},{"line_number":336,"context_line":"accepted into the repository. So, in general, this is similar to specifying"},{"line_number":337,"context_line":"the values of additional type-specific metadata fields."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"For each artifact type its plugin defines the BLOBs supported by this"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_ac732eb0","line":336,"in_reply_to":"1ae5cdf2_37b516ed","updated":"2014-06-30 04:38:16.000000000","message":"OK. Will keep in mind.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":333,"context_line":"the “Import” operation to upload all at once, see “Artifact import” section"},{"line_number":334,"context_line":"below), specifying their types every time. If some required blob is not"},{"line_number":335,"context_line":"uploaded, the \"publishing check\" will not pass and the artifact will not be"},{"line_number":336,"context_line":"accepted into the repository. So, in general, this is similar to specifying"},{"line_number":337,"context_line":"the values of additional type-specific metadata fields."},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"For each artifact type its plugin defines the BLOBs supported by this"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_37b516ed","line":336,"in_reply_to":"1ae5cdf2_776b541f","updated":"2014-06-26 12:48:16.000000000","message":"On the summit we\u0027ve agreed to remove all the checks and validations for now (see [0] line 38). We\u0027ll re-introduce them at later iterations.\n\n[0] https://etherpad.openstack.org/p/juno-hot-artifacts-repository-finalize-design","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":401,"context_line":"they are stored in repository database together with artifact records. They"},{"line_number":402,"context_line":"are immutable, i.e. can be defined only during the import operation or while"},{"line_number":403,"context_line":"the artifact is in the CREATING state and cannot be modified after it is"},{"line_number":404,"context_line":"published."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"The operations to create, view or modify a dependency for a particular"},{"line_number":407,"context_line":"artifact should be implemented as a set of APIs similar to other metadata"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_360b8525","line":404,"updated":"2014-06-25 13:58:32.000000000","message":"This limitation is neat, and I believe it\u0027s easy to be implemented. But can we think about allowing deployer change the dependency of artifact which under PUBLISHED status? Because I think this function will help deployer updates/manages artifact dependancy regarding to his cloud deployment evolution, for example A depends on B (the chain may longer then this example in real practice), and as the days went by, deployer may want to update B for A or all artifacts which based on it. Otherwise, under this limitation, deployer needs to rebuild whole dependency chain. Let me know if I miss anything.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":401,"context_line":"they are stored in repository database together with artifact records. They"},{"line_number":402,"context_line":"are immutable, i.e. can be defined only during the import operation or while"},{"line_number":403,"context_line":"the artifact is in the CREATING state and cannot be modified after it is"},{"line_number":404,"context_line":"published."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"The operations to create, view or modify a dependency for a particular"},{"line_number":407,"context_line":"artifact should be implemented as a set of APIs similar to other metadata"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f7080e93","line":404,"in_reply_to":"1ae5cdf2_360b8525","updated":"2014-06-26 12:48:16.000000000","message":"Initial design had a concept of \"dynamic dependency relations\" which were actually queries instead of static references (e.g. \"Artifact A depends on the most recent version of artifact of type T which contains N in its name and has the value of custom field X equal to Y\").\n\nOn the summit we agreed to drop this kind of dependencies for now and implement only \"static checked dependencies\" (see [0], line 37). We may come back to the idea of dynamic references later.\n\n[0] - https://etherpad.openstack.org/p/juno-hot-artifacts-repository-finalize-design","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b45d412f14db15aac2aa78b42dab2e9838cdbe9d","unresolved":false,"context_lines":[{"line_number":401,"context_line":"they are stored in repository database together with artifact records. They"},{"line_number":402,"context_line":"are immutable, i.e. can be defined only during the import operation or while"},{"line_number":403,"context_line":"the artifact is in the CREATING state and cannot be modified after it is"},{"line_number":404,"context_line":"published."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"The operations to create, view or modify a dependency for a particular"},{"line_number":407,"context_line":"artifact should be implemented as a set of APIs similar to other metadata"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_2cb63e3e","line":404,"in_reply_to":"1ae5cdf2_f7080e93","updated":"2014-06-30 04:38:16.000000000","message":"So, you\u0027d like to left this limitation to \u0027static checked dependency\u0027 concept at the moment right?","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"8054ba0791f53eeec7e59480d4c2df7d78d95bcc","unresolved":false,"context_lines":[{"line_number":401,"context_line":"they are stored in repository database together with artifact records. They"},{"line_number":402,"context_line":"are immutable, i.e. can be defined only during the import operation or while"},{"line_number":403,"context_line":"the artifact is in the CREATING state and cannot be modified after it is"},{"line_number":404,"context_line":"published."},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"The operations to create, view or modify a dependency for a particular"},{"line_number":407,"context_line":"artifact should be implemented as a set of APIs similar to other metadata"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_704ac884","line":404,"in_reply_to":"dab895d6_2cb63e3e","updated":"2014-06-30 08:44:11.000000000","message":"Yes","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* **CREATING** state indicates that the artifact record has been created in"},{"line_number":434,"context_line":"  repository (ID was assigned), but the artifact is still being constructed"},{"line_number":435,"context_line":"  (some fields have to be set, the data uploaded etc). Mutable metadata fields"},{"line_number":436,"context_line":"  may be modified while the artifact is in this state. The binary data may be"},{"line_number":437,"context_line":"  uploaded, the dependencies may be set or modified."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"  Artifacts in the CREATING state are not visible to tenants other then owners\u0027"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_9601b9b1","line":436,"updated":"2014-06-25 13:58:32.000000000","message":"Following existing \u0027direct_url\u0027 mechanism, I\u0027d like to see Artifacts Repo allows deployer provides data to artifact by a \u0027direct\u0027 existing binary data location/uri instead to upload its bits in any case since client/upper layer application may already has prepared its data in backend storage and doesn\u0027t need uploading via http api every time.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b45d412f14db15aac2aa78b42dab2e9838cdbe9d","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* **CREATING** state indicates that the artifact record has been created in"},{"line_number":434,"context_line":"  repository (ID was assigned), but the artifact is still being constructed"},{"line_number":435,"context_line":"  (some fields have to be set, the data uploaded etc). Mutable metadata fields"},{"line_number":436,"context_line":"  may be modified while the artifact is in this state. The binary data may be"},{"line_number":437,"context_line":"  uploaded, the dependencies may be set or modified."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"  Artifacts in the CREATING state are not visible to tenants other then owners\u0027"}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_8c7caa74","line":436,"in_reply_to":"1ae5cdf2_17cd7a30","updated":"2014-06-30 04:38:16.000000000","message":"Thanks.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":433,"context_line":"* **CREATING** state indicates that the artifact record has been created in"},{"line_number":434,"context_line":"  repository (ID was assigned), but the artifact is still being constructed"},{"line_number":435,"context_line":"  (some fields have to be set, the data uploaded etc). Mutable metadata fields"},{"line_number":436,"context_line":"  may be modified while the artifact is in this state. The binary data may be"},{"line_number":437,"context_line":"  uploaded, the dependencies may be set or modified."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"  Artifacts in the CREATING state are not visible to tenants other then owners\u0027"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_17cd7a30","line":436,"in_reply_to":"1ae5cdf2_9601b9b1","updated":"2014-06-26 12:48:16.000000000","message":"Got it. Modified both this section and \"Binary Data\" above to reflect this.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":454,"context_line":"  Artifacts in PUBLISHED state may be shared with others using sharing APIs."},{"line_number":455,"context_line":"  When the artifact is in this state is is assumed that it may be used by"},{"line_number":456,"context_line":"  the third-party services."},{"line_number":457,"context_line":"  When the artifact is in READY state its owner may initiate its deletion."},{"line_number":458,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"* **DELETED** state indicates that the artifact has been deleted and its data"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f6d4bd20","line":457,"updated":"2014-06-25 13:58:32.000000000","message":"s/READY/PUBLISHED ?","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":454,"context_line":"  Artifacts in PUBLISHED state may be shared with others using sharing APIs."},{"line_number":455,"context_line":"  When the artifact is in this state is is assumed that it may be used by"},{"line_number":456,"context_line":"  the third-party services."},{"line_number":457,"context_line":"  When the artifact is in READY state its owner may initiate its deletion."},{"line_number":458,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"* **DELETED** state indicates that the artifact has been deleted and its data"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_97e0aa98","line":457,"in_reply_to":"1ae5cdf2_f6d4bd20","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":460,"context_line":"* **DELETED** state indicates that the artifact has been deleted and its data"},{"line_number":461,"context_line":"  and metadata objects are not accessible anymore."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"  This state is available only if a \"SoftDelete\" option may be enabled in the"},{"line_number":464,"context_line":"  configuration file, which makes the deletion to be non-permanent: the"},{"line_number":465,"context_line":"  artifacts are just marked as deleted and may be restored by their owners."},{"line_number":466,"context_line":"  In this case the metadata fields and data objects are not actually deleted,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_96c61967","line":463,"updated":"2014-06-25 13:58:32.000000000","message":"To help backward-compatibility, I prefer to change \u0027SoftDelete\u0027 mechanism to \u0027delayed_delete\u0027 mechanism [0], and it could cover bin-data reclaiming issue as well (by enhanced scrubber, or dedicated function)\n\n[0] https://github.com/openstack/glance/blob/master/etc/glance-api.conf#L515","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":460,"context_line":"* **DELETED** state indicates that the artifact has been deleted and its data"},{"line_number":461,"context_line":"  and metadata objects are not accessible anymore."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"  This state is available only if a \"SoftDelete\" option may be enabled in the"},{"line_number":464,"context_line":"  configuration file, which makes the deletion to be non-permanent: the"},{"line_number":465,"context_line":"  artifacts are just marked as deleted and may be restored by their owners."},{"line_number":466,"context_line":"  In this case the metadata fields and data objects are not actually deleted,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_978eeacf","line":463,"in_reply_to":"1ae5cdf2_96c61967","updated":"2014-06-26 12:48:16.000000000","message":"Cool, I didn\u0027t know about this feature in Glance. \nSure, let\u0027s use the same logic.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":485,"context_line":"Publishing is an operation which makes an artifact available for usage: when"},{"line_number":486,"context_line":"all the metadata fields are set and the binary data parts are uploaded"},{"line_number":487,"context_line":"(which may be a lengthly multi-step process), it may be made available by"},{"line_number":488,"context_line":"calling a special API method to change its state to PUBLISHED"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"**Importing an Artifact**"},{"line_number":491,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_76750d32","line":488,"updated":"2014-06-25 13:58:32.000000000","message":"Pls mention dependency-verify-process here.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":485,"context_line":"Publishing is an operation which makes an artifact available for usage: when"},{"line_number":486,"context_line":"all the metadata fields are set and the binary data parts are uploaded"},{"line_number":487,"context_line":"(which may be a lengthly multi-step process), it may be made available by"},{"line_number":488,"context_line":"calling a special API method to change its state to PUBLISHED"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"**Importing an Artifact**"},{"line_number":491,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_775a3e51","line":488,"in_reply_to":"1ae5cdf2_76750d32","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"Regardless of the way used to share the artifact, the access provided to the"},{"line_number":543,"context_line":"artifact is read-only: the users of other tenants are not able to modify or"},{"line_number":544,"context_line":"delete the artifact."},{"line_number":545,"context_line":""},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"**Deleting an Artifact**"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_7638ad3b","line":544,"updated":"2014-06-25 13:58:32.000000000","message":"..and update the dependency relationship.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":"Regardless of the way used to share the artifact, the access provided to the"},{"line_number":543,"context_line":"artifact is read-only: the users of other tenants are not able to modify or"},{"line_number":544,"context_line":"delete the artifact."},{"line_number":545,"context_line":""},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"**Deleting an Artifact**"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f7356ef7","line":544,"in_reply_to":"1ae5cdf2_7638ad3b","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":552,"context_line":"- All the artifacts of the current tenant are inspected. If any of them have a"},{"line_number":553,"context_line":"  Dependency Relation to the artifact being deleted, the deletion operation is"},{"line_number":554,"context_line":"  aborted"},{"line_number":555,"context_line":"- If the soft delete is enabled, artifact\u0027s state is set to DELETED"},{"line_number":556,"context_line":"- If the soft delete is not enabled, then a background task is scheduled to"},{"line_number":557,"context_line":"  run the following actions:"},{"line_number":558,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_7670adda","line":555,"updated":"2014-06-25 13:58:32.000000000","message":"Same thinking from me, line #463.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":552,"context_line":"- All the artifacts of the current tenant are inspected. If any of them have a"},{"line_number":553,"context_line":"  Dependency Relation to the artifact being deleted, the deletion operation is"},{"line_number":554,"context_line":"  aborted"},{"line_number":555,"context_line":"- If the soft delete is enabled, artifact\u0027s state is set to DELETED"},{"line_number":556,"context_line":"- If the soft delete is not enabled, then a background task is scheduled to"},{"line_number":557,"context_line":"  run the following actions:"},{"line_number":558,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_3259a4fd","line":555,"in_reply_to":"1ae5cdf2_7670adda","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":557,"context_line":"  run the following actions:"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"  * Delete all the binary data objects of the artifact from the underlying"},{"line_number":560,"context_line":"    storage system."},{"line_number":561,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":562,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":563,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_d9fd320a","line":560,"updated":"2014-06-25 13:58:32.000000000","message":"The the performance issue of deleting delay could be covered by  \u0027delayed_delete\u0027 mechanism as well.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b45d412f14db15aac2aa78b42dab2e9838cdbe9d","unresolved":false,"context_lines":[{"line_number":557,"context_line":"  run the following actions:"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"  * Delete all the binary data objects of the artifact from the underlying"},{"line_number":560,"context_line":"    storage system."},{"line_number":561,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":562,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":563,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_4ce9b219","line":560,"in_reply_to":"1ae5cdf2_d20400c8","updated":"2014-06-30 04:38:16.000000000","message":"No, when delayed_delete enabled, the delay will be there in any case even operator could set it to be short.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":557,"context_line":"  run the following actions:"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"  * Delete all the binary data objects of the artifact from the underlying"},{"line_number":560,"context_line":"    storage system."},{"line_number":561,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":562,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":563,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_d20400c8","line":560,"in_reply_to":"1ae5cdf2_d9fd320a","updated":"2014-06-26 12:48:16.000000000","message":"So, the delayed_delete can be scheduled to run immediately?","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"8054ba0791f53eeec7e59480d4c2df7d78d95bcc","unresolved":false,"context_lines":[{"line_number":557,"context_line":"  run the following actions:"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"  * Delete all the binary data objects of the artifact from the underlying"},{"line_number":560,"context_line":"    storage system."},{"line_number":561,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":562,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":563,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"dab895d6_7031e80a","line":560,"in_reply_to":"dab895d6_4ce9b219","updated":"2014-06-30 08:44:11.000000000","message":"Understood.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":561,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":562,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":563,"context_line":""},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"Alternatives"},{"line_number":566,"context_line":"------------"},{"line_number":567,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_b9e06627","line":564,"updated":"2014-06-25 13:58:32.000000000","message":"Thank you for introducing the concepts and behaviors of Artifact Repo idea,  so I\u0027d like to see the detail design and implementation plans of those concepts and behaviors as this \u0027proposed change\u0027 section required. Do you want to use this spec to cover them all or using a separated one?","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":561,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":562,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":563,"context_line":""},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"Alternatives"},{"line_number":566,"context_line":"------------"},{"line_number":567,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_12c6689c","line":564,"in_reply_to":"1ae5cdf2_b9e06627","updated":"2014-06-26 12:48:16.000000000","message":"I planned to reach general agreement ( to get the +1\u0027s) on the overall idea, and then update this file with a different (dependent) patch set which will add the API spec and the data model.\nBut if it is not a correct process, please correct me.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":614,"context_line":"  third-party developers, and thus has to be inspected for potential security"},{"line_number":615,"context_line":"  problems. However, an explicit cloud operators action is required to enable"},{"line_number":616,"context_line":"  this modules (i.e. they are not user-supplied), so while the operator enables"},{"line_number":617,"context_line":"  only the trusted plugins there are no security threats."},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"* The artifact import logic processes the user-supplied file (artifact),"},{"line_number":620,"context_line":"  decomposes it and uses it to create a new artifact record in the repository,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f9066ecc","line":617,"updated":"2014-06-25 13:58:32.000000000","message":"And base on your above description, you have plan to add some rules to give some necessary policy-based controllers, so pls mention it and list those policy here with its description as supplement and elaboration.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":614,"context_line":"  third-party developers, and thus has to be inspected for potential security"},{"line_number":615,"context_line":"  problems. However, an explicit cloud operators action is required to enable"},{"line_number":616,"context_line":"  this modules (i.e. they are not user-supplied), so while the operator enables"},{"line_number":617,"context_line":"  only the trusted plugins there are no security threats."},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"* The artifact import logic processes the user-supplied file (artifact),"},{"line_number":620,"context_line":"  decomposes it and uses it to create a new artifact record in the repository,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_c6e2852f","line":617,"in_reply_to":"1ae5cdf2_f9066ecc","updated":"2014-06-26 12:48:16.000000000","message":"Got it. Will add the policies as the list of available API calls is ready","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":620,"context_line":"  decomposes it and uses it to create a new artifact record in the repository,"},{"line_number":621,"context_line":"  populate its data objects and set metadata fields. The artifact file is"},{"line_number":622,"context_line":"  provided by users at a runtime and may contain arbitrary data, including"},{"line_number":623,"context_line":"  potentially harmfull. Artifact Repository should not attempt to execute"},{"line_number":624,"context_line":"  any code or instructions received in this way. Custom logic which handles"},{"line_number":625,"context_line":"  the import is part of the plugin (i.e. cloud operator\u0027s action is required"},{"line_number":626,"context_line":"  to enable it). Thus there is no security issue here unless the operator"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_799c1e5c","line":623,"updated":"2014-06-25 13:58:32.000000000","message":"typo: harmfull","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":620,"context_line":"  decomposes it and uses it to create a new artifact record in the repository,"},{"line_number":621,"context_line":"  populate its data objects and set metadata fields. The artifact file is"},{"line_number":622,"context_line":"  provided by users at a runtime and may contain arbitrary data, including"},{"line_number":623,"context_line":"  potentially harmfull. Artifact Repository should not attempt to execute"},{"line_number":624,"context_line":"  any code or instructions received in this way. Custom logic which handles"},{"line_number":625,"context_line":"  the import is part of the plugin (i.e. cloud operator\u0027s action is required"},{"line_number":626,"context_line":"  to enable it). Thus there is no security issue here unless the operator"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_72224c02","line":623,"in_reply_to":"1ae5cdf2_799c1e5c","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":629,"context_line":"Notifications impact"},{"line_number":630,"context_line":"--------------------"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"None"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"Other end user impact"},{"line_number":635,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_5924c20d","line":632,"updated":"2014-06-25 13:58:32.000000000","message":"does Artifact Repo really have no any notification emission? It doesn\u0027t make sense tbh.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":629,"context_line":"Notifications impact"},{"line_number":630,"context_line":"--------------------"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"None"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"Other end user impact"},{"line_number":635,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_26eec922","line":632,"in_reply_to":"1ae5cdf2_5924c20d","updated":"2014-06-26 12:48:16.000000000","message":"Yes, this definitely has to contain \"[to be added]\" instead of None. I just didn\u0027t design them yet. Will add with the API description","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":644,"context_line":"existing ones. Thus there should be now impact on performance when calling"},{"line_number":645,"context_line":"the APIs."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"Long running tasks (such as artifact importing or deletion) should be made"},{"line_number":648,"context_line":"asynchronous and should be executed by dedicated background workers, so they"},{"line_number":649,"context_line":"will not interfere with the API performance."},{"line_number":650,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_99a80a22","line":647,"updated":"2014-06-25 13:58:32.000000000","message":"For the performance issue of deletion, what about to follow existing \u0027delayed_delete\u0027 mechanism? as I said above at line #463.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":644,"context_line":"existing ones. Thus there should be now impact on performance when calling"},{"line_number":645,"context_line":"the APIs."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"Long running tasks (such as artifact importing or deletion) should be made"},{"line_number":648,"context_line":"asynchronous and should be executed by dedicated background workers, so they"},{"line_number":649,"context_line":"will not interfere with the API performance."},{"line_number":650,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_06bc6d6b","line":647,"in_reply_to":"1ae5cdf2_99a80a22","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":652,"context_line":"---------------------"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"The database schema changes should be made with migrations. This migrations"},{"line_number":655,"context_line":"have to be executed prior the usage of the new functionality."},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"Developer impact"},{"line_number":658,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f94bce83","line":655,"updated":"2014-06-25 13:58:32.000000000","message":"Do we have some migration efforts for existing image resources?","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":652,"context_line":"---------------------"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"The database schema changes should be made with migrations. This migrations"},{"line_number":655,"context_line":"have to be executed prior the usage of the new functionality."},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"Developer impact"},{"line_number":658,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_f2357cf7","line":655,"in_reply_to":"1ae5cdf2_f94bce83","updated":"2014-06-26 12:48:16.000000000","message":"For now (in J at least) we are not modifying the existing images: we\u0027ve agreed, that the /v2/images endpoint remains unmodified. \nI don\u0027t think we need to add any migrations until we have a fully-functional analogue of images built as artifacts, and this will take time.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":704,"context_line":"#. Modification of the database layer and data migrations to extend image"},{"line_number":705,"context_line":"   sharing functionality to share the artifacts in the same way as images"},{"line_number":706,"context_line":"#. The REST API for artifact sharing"},{"line_number":707,"context_line":"#. Soft delete feature: REST API to add delete/restore functionality."},{"line_number":708,"context_line":"#. Modifications to python-glancecleint to make use of all the new APIs."},{"line_number":709,"context_line":""},{"line_number":710,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_54d3a9d4","line":707,"updated":"2014-06-25 13:58:32.000000000","message":"ditto, line #463.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":704,"context_line":"#. Modification of the database layer and data migrations to extend image"},{"line_number":705,"context_line":"   sharing functionality to share the artifacts in the same way as images"},{"line_number":706,"context_line":"#. The REST API for artifact sharing"},{"line_number":707,"context_line":"#. Soft delete feature: REST API to add delete/restore functionality."},{"line_number":708,"context_line":"#. Modifications to python-glancecleint to make use of all the new APIs."},{"line_number":709,"context_line":""},{"line_number":710,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_e688616d","line":707,"in_reply_to":"1ae5cdf2_54d3a9d4","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":721,"context_line":"All the new APIs should be covered by integration tests."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"Data migrations and database API should be covered by Unit tests."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"Documentation Impact"},{"line_number":727,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_74ad05ea","line":724,"updated":"2014-06-25 13:58:32.000000000","message":"Is there any plan to cover tempset stuff? I believe it\u0027s a rigid requirement.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":721,"context_line":"All the new APIs should be covered by integration tests."},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"Data migrations and database API should be covered by Unit tests."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"Documentation Impact"},{"line_number":727,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_c65d2518","line":724,"in_reply_to":"1ae5cdf2_74ad05ea","updated":"2014-06-26 12:48:16.000000000","message":"That\u0027s what I meant by \"integration tests\". Will make it more explicit.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c970d57fee80bfa7c1f150dd2567670b671cba7e","unresolved":false,"context_lines":[{"line_number":726,"context_line":"Documentation Impact"},{"line_number":727,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"All the new APIs should be documented."},{"line_number":730,"context_line":""},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_948ff175","line":729,"updated":"2014-06-25 13:58:32.000000000","message":"And new configuration option(s), and new policies.","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"287ff7177cab2a6013e8ed4f6e4cfd215b0701a6","unresolved":false,"context_lines":[{"line_number":726,"context_line":"Documentation Impact"},{"line_number":727,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"All the new APIs should be documented."},{"line_number":730,"context_line":""},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1ae5cdf2_a692d99c","line":729,"in_reply_to":"1ae5cdf2_948ff175","updated":"2014-06-26 12:48:16.000000000","message":"Done","commit_id":"673dbc55cca11fce98c2bccbfbded0f45f447e66"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"4cc78d0428cec2aebb411affc5753931a905021f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  parts of its metadata. So once the consumer has discovered an artifact, its"},{"line_number":85,"context_line":"  content is guaranteed to remain the same during the whole life of the"},{"line_number":86,"context_line":"  object. The artifact may be deleted, but any modifications introduced will"},{"line_number":87,"context_line":"  result in creating a new object with a new unique identifier."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"**Artifact types**"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_05c0b1de","line":87,"updated":"2014-06-27 17:46:40.000000000","message":"This language sounds good, but I wonder if we need to add a little indicator that the unique identifier is expected to include a version string? Or maybe even just a link or pointer here to the versioning section below.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"23021ad2448ac940e56b5917d40062014c3c7611","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  parts of its metadata. So once the consumer has discovered an artifact, its"},{"line_number":85,"context_line":"  content is guaranteed to remain the same during the whole life of the"},{"line_number":86,"context_line":"  object. The artifact may be deleted, but any modifications introduced will"},{"line_number":87,"context_line":"  result in creating a new object with a new unique identifier."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"**Artifact types**"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab895d6_7b2b8982","line":87,"in_reply_to":"1ae5cdf2_05c0b1de","updated":"2014-07-01 10:04:20.000000000","message":"By \"unique identifier\" here I mean the \"Id\" field, not the combination of \"name\" + \"version\". But you are right, it is better to mention versioning in the context of modifications.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"4cc78d0428cec2aebb411affc5753931a905021f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"Each plugin defines a version for each of its artifact types. This version"},{"line_number":127,"context_line":"information is persisted with the artifact metadata to allow artifact type"},{"line_number":128,"context_line":"versioning and migrations in future."},{"line_number":129,"context_line":"For now only a single version of each artifact type may be active at any moment"},{"line_number":130,"context_line":"of time."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"To enable a plugin the cloud operator has to place the python module into"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_655ed546","line":129,"updated":"2014-06-27 17:46:40.000000000","message":"This is an interesting restriction--but sounds like a reasonable early simplification to help increase initial velocity.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"23021ad2448ac940e56b5917d40062014c3c7611","unresolved":false,"context_lines":[{"line_number":126,"context_line":"Each plugin defines a version for each of its artifact types. This version"},{"line_number":127,"context_line":"information is persisted with the artifact metadata to allow artifact type"},{"line_number":128,"context_line":"versioning and migrations in future."},{"line_number":129,"context_line":"For now only a single version of each artifact type may be active at any moment"},{"line_number":130,"context_line":"of time."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"To enable a plugin the cloud operator has to place the python module into"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab895d6_db401538","line":129,"in_reply_to":"1ae5cdf2_655ed546","updated":"2014-07-01 10:04:20.000000000","message":"Right. Otherwise we may face the need to implement \"artifact migration\" logic, which may turn to be a tricky task.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0f50f7360d30ba1d719b3ab14a90e6675c0b0b5a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"     - UUID String"},{"line_number":163,"context_line":"     - Cannot be set explicitly, identifies the artifact in the repository."},{"line_number":164,"context_line":"       Is assigned automatically once the artifact\u0027s draft is registered or"},{"line_number":165,"context_line":"       artifact is imported"},{"line_number":166,"context_line":"   * - Type"},{"line_number":167,"context_line":"     - Immutable"},{"line_number":168,"context_line":"     - Yes"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_bb30fae9","line":165,"updated":"2014-06-27 17:37:38.000000000","message":"Currently, an admin can set the ID of an image.  I\u0027d kind of like to keep that behavior.  It\u0027s useful for emergencies.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"23021ad2448ac940e56b5917d40062014c3c7611","unresolved":false,"context_lines":[{"line_number":162,"context_line":"     - UUID String"},{"line_number":163,"context_line":"     - Cannot be set explicitly, identifies the artifact in the repository."},{"line_number":164,"context_line":"       Is assigned automatically once the artifact\u0027s draft is registered or"},{"line_number":165,"context_line":"       artifact is imported"},{"line_number":166,"context_line":"   * - Type"},{"line_number":167,"context_line":"     - Immutable"},{"line_number":168,"context_line":"     - Yes"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab895d6_bb036172","line":165,"in_reply_to":"1ae5cdf2_bb30fae9","updated":"2014-07-01 10:04:20.000000000","message":"Agreed.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"4cc78d0428cec2aebb411affc5753931a905021f","unresolved":false,"context_lines":[{"line_number":258,"context_line":"       PUBLISHED state to DELETED. Is empty for artifacts not in DELETED"},{"line_number":259,"context_line":"       state"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"**Type-specific metadata fields**"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"For each type of artifact, additional metadata fields may be defined."},{"line_number":264,"context_line":"This set of fields and their properties are specified by the artifact types."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_db42263a","line":261,"updated":"2014-06-27 17:46:40.000000000","message":"Is there any sort of simple example you can give for how the type-specific metadata, as defined here, would be used? I was imagining a slightly different mechanism, but it was not very clear in my mind. So an example would help me to understand a bit better.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"23021ad2448ac940e56b5917d40062014c3c7611","unresolved":false,"context_lines":[{"line_number":258,"context_line":"       PUBLISHED state to DELETED. Is empty for artifacts not in DELETED"},{"line_number":259,"context_line":"       state"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"**Type-specific metadata fields**"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"For each type of artifact, additional metadata fields may be defined."},{"line_number":264,"context_line":"This set of fields and their properties are specified by the artifact types."}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_da300159","line":261,"in_reply_to":"1ae5cdf2_db42263a","updated":"2014-07-01 10:04:20.000000000","message":"Well, \"Images\" artifact may have String-type metadata field called \u0027OS_TYPE\u0027 to contain the the type of operating system (say, \"Linux\", \"Windows\", \"Other\") which may be used to filter Linux-only images for example.\nSame type of artifact may define Numeric-typed field called \u0027MIN_RAM\u0027 - which will provide backwards compatibility with the current MIN_RAM field of Images - and will allow filtering artifacts in range of values of this field.\nSet-typed fields provide tag-like semantics: ability to assign several string values to a single artifact and be able to filter artifacts by having one of the values. This may be used for application catalog scenarios (Categories of the app, which is similar to Tags, but is slightly different).\n\nAll this examples are given below. Please let me know if something is wrong or unclear there.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"4cc78d0428cec2aebb411affc5753931a905021f","unresolved":false,"context_lines":[{"line_number":302,"context_line":"The Artifact repository is able to store different versions of the same"},{"line_number":303,"context_line":"artifact. From repository\u0027s point of view these are different objects"},{"line_number":304,"context_line":"(having different IDs, stored independently and having independent"},{"line_number":305,"context_line":"lifecycle), but having the same type and name, but different version fields."},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"The version field is one of common immutable metadata fields (see above)."},{"line_number":308,"context_line":"It follows the `SemVer notation \u003chttp://semver.org\u003e`_, i.e. its value is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_bb5e3a11","line":305,"updated":"2014-06-27 17:46:40.000000000","message":"perfect!","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0f50f7360d30ba1d719b3ab14a90e6675c0b0b5a","unresolved":false,"context_lines":[{"line_number":474,"context_line":"  When the artifact is in CREATING state its owner may initiate its deletion."},{"line_number":475,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"* **PUBLISHED** state indicates that the artifact is available for the usage."},{"line_number":478,"context_line":"  When the artifact is in this state the immutable metadata fields may not be"},{"line_number":479,"context_line":"  updated, no new binary data may be uploaded, existing data may not be deleted."},{"line_number":480,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ae5cdf2_9bbfbefb","line":477,"updated":"2014-06-27 17:37:38.000000000","message":"How do you feel about ACTIVE instead of PUBLISHED?  There\u0027s a blueprint to add a DEACTIVATED state to images, the idea being that a provider might want to investigate an image (e.g., a shared image that a customer has complained has a backdoor or something) and not allow it to be used while under investigation, but might still want its metadata to be available so that users can see that this thing exists, it\u0027s just not available at the present moment.  Then it would be either re-activated or deleted, depending on the outcome of the investigation.  Of course, an artifact could go from PUBLISHED \u003c-\u003e DEACTIVATED, it just doesn\u0027t seem quite as symmetric.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"23021ad2448ac940e56b5917d40062014c3c7611","unresolved":false,"context_lines":[{"line_number":474,"context_line":"  When the artifact is in CREATING state its owner may initiate its deletion."},{"line_number":475,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"* **PUBLISHED** state indicates that the artifact is available for the usage."},{"line_number":478,"context_line":"  When the artifact is in this state the immutable metadata fields may not be"},{"line_number":479,"context_line":"  updated, no new binary data may be uploaded, existing data may not be deleted."},{"line_number":480,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_7d90cf95","line":477,"in_reply_to":"1ae5cdf2_9bbfbefb","updated":"2014-07-01 10:04:20.000000000","message":"Got it. Renamed the state, changed the description of DEACTIVATED state as well.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"3543f07a179eb03c0926f46a54e51b0a9835e859","unresolved":false,"context_lines":[{"line_number":474,"context_line":"  When the artifact is in CREATING state its owner may initiate its deletion."},{"line_number":475,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"* **PUBLISHED** state indicates that the artifact is available for the usage."},{"line_number":478,"context_line":"  When the artifact is in this state the immutable metadata fields may not be"},{"line_number":479,"context_line":"  updated, no new binary data may be uploaded, existing data may not be deleted."},{"line_number":480,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab895d6_8c82eafe","line":477,"in_reply_to":"1ae5cdf2_9bbfbefb","updated":"2014-06-30 04:59:52.000000000","message":"Sounds ACTIVE is more symmetric and consistent.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"3543f07a179eb03c0926f46a54e51b0a9835e859","unresolved":false,"context_lines":[{"line_number":521,"context_line":"During the execution of this call Glance will verify that all the dependency"},{"line_number":522,"context_line":"relations are set to the existing and already published artifacts. If at least"},{"line_number":523,"context_line":"one of the dependencies either does not exist (i.e. the artifact has been"},{"line_number":524,"context_line":"deleted after the dependency was created) or is not in the READY state, then"},{"line_number":525,"context_line":"the publishing action will fail."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"**Importing an Artifact**"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab895d6_4c8ff223","line":524,"updated":"2014-06-30 04:59:52.000000000","message":"remove \"or is not in the READY state\" pls.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"23021ad2448ac940e56b5917d40062014c3c7611","unresolved":false,"context_lines":[{"line_number":521,"context_line":"During the execution of this call Glance will verify that all the dependency"},{"line_number":522,"context_line":"relations are set to the existing and already published artifacts. If at least"},{"line_number":523,"context_line":"one of the dependencies either does not exist (i.e. the artifact has been"},{"line_number":524,"context_line":"deleted after the dependency was created) or is not in the READY state, then"},{"line_number":525,"context_line":"the publishing action will fail."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"**Importing an Artifact**"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_5dda2b79","line":524,"in_reply_to":"dab895d6_4c8ff223","updated":"2014-07-01 10:04:20.000000000","message":"Why? The published (i.e. ACTIVE) artifact should not depend on the artifacts which are not published yet.","commit_id":"c9b5fc2e125bc3ecaeaabbaa077281da9473c527"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":14,"context_line":"artifacts, i.e binary objects accompanied with composite metadata."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Glance should become a catalog of such artifacts, providing capabilities to"},{"line_number":17,"context_line":"store, search and retrive their artifacts, their metadata and associated"},{"line_number":18,"context_line":"binary objects."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_249cfb0e","line":17,"updated":"2014-07-04 10:43:35.000000000","message":"typo: retrieve","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":14,"context_line":"artifacts, i.e binary objects accompanied with composite metadata."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Glance should become a catalog of such artifacts, providing capabilities to"},{"line_number":17,"context_line":"store, search and retrive their artifacts, their metadata and associated"},{"line_number":18,"context_line":"binary objects."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_1039eda3","line":17,"in_reply_to":"baada198_249cfb0e","updated":"2014-07-04 12:32:10.000000000","message":"Done","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":86,"context_line":"  and no other object may get the same ID. The artifact may be deleted, but any"},{"line_number":87,"context_line":"  modifications introduced will result in creating a new object with a new ID."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"*Note: To properly handle modification scenarios is is advised not to delete"},{"line_number":90,"context_line":"the existing artifact, but to create the new version of it. See the \"Artifact"},{"line_number":91,"context_line":"Versions\" section below*"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_845f8740","line":89,"updated":"2014-07-04 10:43:35.000000000","message":"typo: \u0027is is advised\u0027 -\u003e \u0027it is advised\u0027","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":86,"context_line":"  and no other object may get the same ID. The artifact may be deleted, but any"},{"line_number":87,"context_line":"  modifications introduced will result in creating a new object with a new ID."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"*Note: To properly handle modification scenarios is is advised not to delete"},{"line_number":90,"context_line":"the existing artifact, but to create the new version of it. See the \"Artifact"},{"line_number":91,"context_line":"Versions\" section below*"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_10600da4","line":89,"in_reply_to":"baada198_845f8740","updated":"2014-07-04 12:32:10.000000000","message":"Done","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"A given artifact type may be defined only in a single plugin, i.e. if there are"},{"line_number":127,"context_line":"several plugins defining the same artifact type, then only one of them may be"},{"line_number":128,"context_line":"active at any moment."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Each plugin defines a version for each of its artifact types. This version"},{"line_number":131,"context_line":"information is persisted with the artifact metadata to allow artifact type"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_7feafcac","line":128,"updated":"2014-07-04 10:43:35.000000000","message":"Will the glance service complain during startup when multiple plugins for the same type are found? E.g. a warning in the logs?","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"A given artifact type may be defined only in a single plugin, i.e. if there are"},{"line_number":127,"context_line":"several plugins defining the same artifact type, then only one of them may be"},{"line_number":128,"context_line":"active at any moment."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Each plugin defines a version for each of its artifact types. This version"},{"line_number":131,"context_line":"information is persisted with the artifact metadata to allow artifact type"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_90733d7f","line":128,"in_reply_to":"baada198_7feafcac","updated":"2014-07-04 12:32:10.000000000","message":"Yes, it should - and then the type is not loaded from any plugins. I will mention it in the spec, thanks.\n\nBTW, may be a proper solution should be not the warning, but rather a critical error and a failure to start the whole service until the problem is resolved?","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"c100e91ba3a29699aed225a064ffe72511d33c04","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"A given artifact type may be defined only in a single plugin, i.e. if there are"},{"line_number":127,"context_line":"several plugins defining the same artifact type, then only one of them may be"},{"line_number":128,"context_line":"active at any moment."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Each plugin defines a version for each of its artifact types. This version"},{"line_number":131,"context_line":"information is persisted with the artifact metadata to allow artifact type"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_6f7700a0","line":128,"in_reply_to":"baada198_90733d7f","updated":"2014-07-10 12:18:46.000000000","message":"Hm, failing the complete service startup due to plugin conflicts could be a bit too harsh. I think the option you have in patch set 5 looks fine, i.e. a warning, disable the plugin, and let the operate resolve the conflict.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"To enable a plugin the cloud operator has to place the python module into"},{"line_number":137,"context_line":"the appropriate directory of the node which runs Glance and make appropriate"},{"line_number":138,"context_line":"changes into the configuration files."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Only the types from explicitly enabled plugins are available for usage."},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_9f40b0a6","line":138,"updated":"2014-07-04 10:43:35.000000000","message":"Seems like many projects leverage stevedore for doing this. Is this planned here?","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"To enable a plugin the cloud operator has to place the python module into"},{"line_number":137,"context_line":"the appropriate directory of the node which runs Glance and make appropriate"},{"line_number":138,"context_line":"changes into the configuration files."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"Only the types from explicitly enabled plugins are available for usage."},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_f099d979","line":138,"in_reply_to":"baada198_9f40b0a6","updated":"2014-07-04 12:32:10.000000000","message":"I didn\u0027t look there yet, and actually was going to do it the way Heat does it (i.e. manually via pkgutil). Thanks for mentioning stevedore - I\u0027ll definitely check it.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":162,"context_line":"     - Description"},{"line_number":163,"context_line":"   * - ID"},{"line_number":164,"context_line":"     - System"},{"line_number":165,"context_line":"     - N/A"},{"line_number":166,"context_line":"     - UUID String"},{"line_number":167,"context_line":"     - Identifies the artifact in the repository."},{"line_number":168,"context_line":"       Is assigned automatically once the artifact\u0027s draft is registered or"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_7f5d9c78","line":165,"updated":"2014-07-04 10:43:35.000000000","message":"Maybe instead of N/A you could say Required. It is actually required, but just being set by the system in general.\n\nSome more occurrences below ...","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":162,"context_line":"     - Description"},{"line_number":163,"context_line":"   * - ID"},{"line_number":164,"context_line":"     - System"},{"line_number":165,"context_line":"     - N/A"},{"line_number":166,"context_line":"     - UUID String"},{"line_number":167,"context_line":"     - Identifies the artifact in the repository."},{"line_number":168,"context_line":"       Is assigned automatically once the artifact\u0027s draft is registered or"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_50e525da","line":165,"in_reply_to":"baada198_7f5d9c78","updated":"2014-07-04 12:32:10.000000000","message":"Well, \"Required\" means \"Should be provided by user\", which is not true in the case of System properties.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    may use this field to filter artifacts by value equality (e.g. “filter all"},{"line_number":284,"context_line":"    the artifacts of type ‘Image’ having the field ‘OS_TYPE’ equal to"},{"line_number":285,"context_line":"    ‘Linux’”)"},{"line_number":286,"context_line":"  * *Set* - a set of string values (20 characters max each) are stored for"},{"line_number":287,"context_line":"    this field. Such field may be used for tag-like filtering semantics (i.e."},{"line_number":288,"context_line":"    the artifacts of some type may have a set field called ‘Category’, each"},{"line_number":289,"context_line":"    such artifact may have a number of categories assigned, and the filtering"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_fa5c5a1b","line":286,"updated":"2014-07-04 10:43:35.000000000","message":"I understand this \u0027Set\u0027 section, but it reads a bit complicated. If I compare this e.g. to HOT property schemas, this would be a string with a valid_values constraint, right. What about re-using e.g. something like the HOT properties schema data types?","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"c100e91ba3a29699aed225a064ffe72511d33c04","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    may use this field to filter artifacts by value equality (e.g. “filter all"},{"line_number":284,"context_line":"    the artifacts of type ‘Image’ having the field ‘OS_TYPE’ equal to"},{"line_number":285,"context_line":"    ‘Linux’”)"},{"line_number":286,"context_line":"  * *Set* - a set of string values (20 characters max each) are stored for"},{"line_number":287,"context_line":"    this field. Such field may be used for tag-like filtering semantics (i.e."},{"line_number":288,"context_line":"    the artifacts of some type may have a set field called ‘Category’, each"},{"line_number":289,"context_line":"    such artifact may have a number of categories assigned, and the filtering"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_2fe2682f","line":286,"in_reply_to":"baada198_b0004135","updated":"2014-07-10 12:18:46.000000000","message":"Ok, got it. But I still find the description in the spec hard to understand. Maybe an example snippet would help, maybe even a global one which uses all the data types (i.e. not just a small snippet for Set) that shows a complete artifact.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    may use this field to filter artifacts by value equality (e.g. “filter all"},{"line_number":284,"context_line":"    the artifacts of type ‘Image’ having the field ‘OS_TYPE’ equal to"},{"line_number":285,"context_line":"    ‘Linux’”)"},{"line_number":286,"context_line":"  * *Set* - a set of string values (20 characters max each) are stored for"},{"line_number":287,"context_line":"    this field. Such field may be used for tag-like filtering semantics (i.e."},{"line_number":288,"context_line":"    the artifacts of some type may have a set field called ‘Category’, each"},{"line_number":289,"context_line":"    such artifact may have a number of categories assigned, and the filtering"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_b0004135","line":286,"in_reply_to":"baada198_fa5c5a1b","updated":"2014-07-04 12:32:10.000000000","message":"No, this is not \"a string with valid_values constraint\". It is much more like Heat\u0027s \"comma_delimited_list\" parameter type, i.e. a collection of strings (but not ordered, so it is called \"set\", not \"list\").  It is intended to provide \"tag-like\" semantics, i.e. to associate a number of string values with this particular filed of an artifact, and be able to filter artifacts having specific values assigned - in the same manner as we filter them by tag.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":357,"context_line":"  number of VM images, plus an Icon to be displayed in the catalog UI. The VM"},{"line_number":358,"context_line":"  images and the icon are binary objects, but there is no sense in merging them"},{"line_number":359,"context_line":"  into a single block of data: different images may be required by different"},{"line_number":360,"context_line":"  compute nodes to spin-up the VMs, while the icon is needed in UI only.*"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"This means that each artifact may have a number of different BLOBs associated."},{"line_number":363,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_d5ee87ec","line":360,"updated":"2014-07-04 10:43:35.000000000","message":"So is this example suggesting that a Heat template artifact would consist of a template and multiple images? I would rather think this would be just a Heat template file and only references to ordinary image artifacts in glance.\n\nAn example where I think multiple artifact parts make sense if a Heat template, together with a couple of provider templates, and maybe an environment file.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":357,"context_line":"  number of VM images, plus an Icon to be displayed in the catalog UI. The VM"},{"line_number":358,"context_line":"  images and the icon are binary objects, but there is no sense in merging them"},{"line_number":359,"context_line":"  into a single block of data: different images may be required by different"},{"line_number":360,"context_line":"  compute nodes to spin-up the VMs, while the icon is needed in UI only.*"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"This means that each artifact may have a number of different BLOBs associated."},{"line_number":363,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_d09055ef","line":360,"in_reply_to":"baada198_d5ee87ec","updated":"2014-07-04 12:32:10.000000000","message":"Thanks, this makes sense. Will rework the example.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":405,"context_line":"blobs may be deleted once the artifact is moved to the ACTIVE state."},{"line_number":406,"context_line":"When the artifact is deleted, all its blobs are deleted as well."},{"line_number":407,"context_line":"The blob data is accessible to a user only if they have permission to access"},{"line_number":408,"context_line":"the artifact containing that blob."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"**Artifact Dependency Relations**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_f5a70ba5","line":408,"updated":"2014-07-04 10:43:35.000000000","message":"In general it would help to have some kind of schema her that shows how an artifact type definition looks like (with some additional properties, definition of artifacts etc). Without it, this section is hard to understand.\n\nFor the Heat with images example (even though I think storing images as an artifact does not make sense - see my earlier comment): what if the template needs to two distinct images? Does each blob have a name or ID so I can say which blob represents which image in the template?","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"c100e91ba3a29699aed225a064ffe72511d33c04","unresolved":false,"context_lines":[{"line_number":405,"context_line":"blobs may be deleted once the artifact is moved to the ACTIVE state."},{"line_number":406,"context_line":"When the artifact is deleted, all its blobs are deleted as well."},{"line_number":407,"context_line":"The blob data is accessible to a user only if they have permission to access"},{"line_number":408,"context_line":"the artifact containing that blob."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"**Artifact Dependency Relations**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_0ff124cd","line":408,"in_reply_to":"baada198_36bc2a06","updated":"2014-07-10 12:18:46.000000000","message":"+1 on the description tag - that\u0027s easier to handle for humans than IDs","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":405,"context_line":"blobs may be deleted once the artifact is moved to the ACTIVE state."},{"line_number":406,"context_line":"When the artifact is deleted, all its blobs are deleted as well."},{"line_number":407,"context_line":"The blob data is accessible to a user only if they have permission to access"},{"line_number":408,"context_line":"the artifact containing that blob."},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"**Artifact Dependency Relations**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_36bc2a06","line":408,"in_reply_to":"baada198_f5a70ba5","updated":"2014-07-04 12:32:10.000000000","message":"Yes, I will provide the actual JSON-shcema a bit later.\n\nYou are right about the example - I\u0027ve revoked it, not it speaks about \"provider templates\" instead of VM images. Is it better?\n\nRegarding two distinct blobs. Yes, they do have an ID (see above: \"Each of the  blob records contains an id of the particular blob, which may be used to\tdownload the blob\") which may be used to identify it. Also I am thinking about adding an optional \"description\" tag which may be added to each blob when the artifact is being constructed. Will come back to this when implementing the final API calls.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"642361739877d4f8845781a0986b60d99b832944","unresolved":false,"context_lines":[{"line_number":426,"context_line":"  service which is going to use B may detect, that it may need A as well and"},{"line_number":427,"context_line":"  download it in advance.*"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"This eventually creates chains of transitively-dependent artifacts."},{"line_number":430,"context_line":"An API method provided by Artifact Repository should allow to retrieve all the"},{"line_number":431,"context_line":"dependencies of a given artifact. Subsequent calls to the same API will allow"},{"line_number":432,"context_line":"to retrieve all the transitive dependencies."}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_351983d7","line":429,"updated":"2014-07-04 10:43:35.000000000","message":"Hm, dependency handling can become pretty trick and I guess this is highly dependent the consuming service / type of artifact. For example, a reference to an image artifact could just be a URL in a Heat template. Heat would know what to do with this URL (try to get the image), but only Heat understands its template format.\n\nI cannot imaging to properly cover this in a generic fashion. Maybe if dependency handling is done by artifact type plugins, you have a way to address type specifics.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":426,"context_line":"  service which is going to use B may detect, that it may need A as well and"},{"line_number":427,"context_line":"  download it in advance.*"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"This eventually creates chains of transitively-dependent artifacts."},{"line_number":430,"context_line":"An API method provided by Artifact Repository should allow to retrieve all the"},{"line_number":431,"context_line":"dependencies of a given artifact. Subsequent calls to the same API will allow"},{"line_number":432,"context_line":"to retrieve all the transitive dependencies."}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_3618aa1d","line":429,"in_reply_to":"baada198_351983d7","updated":"2014-07-04 12:32:10.000000000","message":"Yes, in this case when you do the artifact import, a custom logic is executed - so it may establish a dependency (for example, when you import a HeatTemplate artifact, the custom plugin may parse the template itself, find that it requires an Image, use provided glance\u0027s in-code API to locate this image - and then establish a dependency to it - so at the usage time all the needed artifacts may be fetched transitively).","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d08ecf3331922fffbe404db6b41b38fb31ed253e","unresolved":false,"context_lines":[{"line_number":538,"context_line":"During the execution of this call Glance will verify that all the dependency"},{"line_number":539,"context_line":"relations are set to the existing and already published artifacts. If at least"},{"line_number":540,"context_line":"one of the dependencies either does not exist (i.e. the artifact has been"},{"line_number":541,"context_line":"deleted after the dependency was created) or is not in the READY state, then"},{"line_number":542,"context_line":"the publishing action will fail."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"**Importing an Artifact**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_e9b76c84","line":541,"updated":"2014-07-03 09:02:41.000000000","message":"s/READY/ACTIVE","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":538,"context_line":"During the execution of this call Glance will verify that all the dependency"},{"line_number":539,"context_line":"relations are set to the existing and already published artifacts. If at least"},{"line_number":540,"context_line":"one of the dependencies either does not exist (i.e. the artifact has been"},{"line_number":541,"context_line":"deleted after the dependency was created) or is not in the READY state, then"},{"line_number":542,"context_line":"the publishing action will fail."},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"**Importing an Artifact**"}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_56151ee3","line":541,"in_reply_to":"baada198_e9b76c84","updated":"2014-07-04 12:32:10.000000000","message":"Done","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d08ecf3331922fffbe404db6b41b38fb31ed253e","unresolved":false,"context_lines":[{"line_number":798,"context_line":"All the new APIs, configuration options and policies should be documented."},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"A new document - \"Plugin developers guide\" has to be added."},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"References"},{"line_number":803,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":804,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_69943ce2","line":801,"updated":"2014-07-03 09:02:41.000000000","message":"It\u0027 will be useful if you can provide a simple artifact state transition diagram, other developer could follow existing artifact state design easily for in future changes, IMO.","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"3ebe486cfd8d7cab29bd5d4862ff3c237f732627","unresolved":false,"context_lines":[{"line_number":798,"context_line":"All the new APIs, configuration options and policies should be documented."},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"A new document - \"Plugin developers guide\" has to be added."},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"References"},{"line_number":803,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":804,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"baada198_39609dce","line":801,"in_reply_to":"baada198_69943ce2","updated":"2014-07-04 12:32:10.000000000","message":"Done. It\u0027s placed at the end of the Artifact Lifecycle section","commit_id":"88bb99673ee9212dff8e022fb9ed0d32fce7a053"},{"author":{"_account_id":9126,"name":"Chris Buccella","email":"chris@buccella.org","username":"hdd"},"change_message_id":"5e418007d4b0558729daffe625e79e3fbfd1b429","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"All artifacts should have the following properties:"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Artifacts shall be consumable by openstack services. Like Nova uses Images"},{"line_number":71,"context_line":"  to run the VMs, so will other existing or upcoming Openstack services use"},{"line_number":72,"context_line":"  different kinds of Artifacts. Ability to be consumed by the services is"},{"line_number":73,"context_line":"  important: data chunks which are not consumable by other services (e.g. user"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_3d977e49","line":70,"updated":"2014-07-15 21:49:34.000000000","message":"nit: openstack -\u003e OpenStack","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"All artifacts should have the following properties:"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Artifacts shall be consumable by openstack services. Like Nova uses Images"},{"line_number":71,"context_line":"  to run the VMs, so will other existing or upcoming Openstack services use"},{"line_number":72,"context_line":"  different kinds of Artifacts. Ability to be consumed by the services is"},{"line_number":73,"context_line":"  important: data chunks which are not consumable by other services (e.g. user"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_0f80448a","line":70,"in_reply_to":"baada198_3d977e49","updated":"2014-08-21 15:14:37.000000000","message":"Done","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":9126,"name":"Chris Buccella","email":"chris@buccella.org","username":"hdd"},"change_message_id":"5e418007d4b0558729daffe625e79e3fbfd1b429","unresolved":false,"context_lines":[{"line_number":68,"context_line":"All artifacts should have the following properties:"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Artifacts shall be consumable by openstack services. Like Nova uses Images"},{"line_number":71,"context_line":"  to run the VMs, so will other existing or upcoming Openstack services use"},{"line_number":72,"context_line":"  different kinds of Artifacts. Ability to be consumed by the services is"},{"line_number":73,"context_line":"  important: data chunks which are not consumable by other services (e.g. user"},{"line_number":74,"context_line":"  data) are NOT artifacts. If one is looking to store such unrelated data then"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_bd8aae18","line":71,"updated":"2014-07-15 21:49:34.000000000","message":"nit: Openstack -\u003e OpenStack","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":68,"context_line":"All artifacts should have the following properties:"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* Artifacts shall be consumable by openstack services. Like Nova uses Images"},{"line_number":71,"context_line":"  to run the VMs, so will other existing or upcoming Openstack services use"},{"line_number":72,"context_line":"  different kinds of Artifacts. Ability to be consumed by the services is"},{"line_number":73,"context_line":"  important: data chunks which are not consumable by other services (e.g. user"},{"line_number":74,"context_line":"  data) are NOT artifacts. If one is looking to store such unrelated data then"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_4f495c8d","line":71,"in_reply_to":"baada198_bd8aae18","updated":"2014-08-21 15:14:37.000000000","message":"Done","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":9126,"name":"Chris Buccella","email":"chris@buccella.org","username":"hdd"},"change_message_id":"5e418007d4b0558729daffe625e79e3fbfd1b429","unresolved":false,"context_lines":[{"line_number":75,"context_line":"  Swift (or any other generic object storage) should be a proper choice."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Artifacts description (metadata) should have a well-defined, discoverable"},{"line_number":78,"context_line":"  type. Artifacts’ metadata should not allow to store arbitrary data: its"},{"line_number":79,"context_line":"  structure should be fixed by the cloud operator by pre-defined or additional"},{"line_number":80,"context_line":"  types added to the Glance service through plug-in extensions."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_9d288a98","line":78,"updated":"2014-07-15 21:49:34.000000000","message":"This reads strangely. Perhaps rewrite by just describing what \"well-defined\" means.","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":75,"context_line":"  Swift (or any other generic object storage) should be a proper choice."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Artifacts description (metadata) should have a well-defined, discoverable"},{"line_number":78,"context_line":"  type. Artifacts’ metadata should not allow to store arbitrary data: its"},{"line_number":79,"context_line":"  structure should be fixed by the cloud operator by pre-defined or additional"},{"line_number":80,"context_line":"  types added to the Glance service through plug-in extensions."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_d266efed","line":78,"in_reply_to":"baada198_9d288a98","updated":"2014-08-21 15:14:37.000000000","message":"Tried to describe a bit more clear.","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":9126,"name":"Chris Buccella","email":"chris@buccella.org","username":"hdd"},"change_message_id":"5e418007d4b0558729daffe625e79e3fbfd1b429","unresolved":false,"context_lines":[{"line_number":178,"context_line":"     - Yes"},{"line_number":179,"context_line":"     - Alphanumeric string, valid artifact type name"},{"line_number":180,"context_line":"     - Identifies the type of artifact, and so its data and metadata structure"},{"line_number":181,"context_line":"       Should be one of the types supported by the repository (handled by the"},{"line_number":182,"context_line":"       active plugins)"},{"line_number":183,"context_line":"   * - TypeVersion"},{"line_number":184,"context_line":"     - System"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_38991ed1","line":181,"updated":"2014-07-15 21:49:34.000000000","message":"Should -\u003e should","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":178,"context_line":"     - Yes"},{"line_number":179,"context_line":"     - Alphanumeric string, valid artifact type name"},{"line_number":180,"context_line":"     - Identifies the type of artifact, and so its data and metadata structure"},{"line_number":181,"context_line":"       Should be one of the types supported by the repository (handled by the"},{"line_number":182,"context_line":"       active plugins)"},{"line_number":183,"context_line":"   * - TypeVersion"},{"line_number":184,"context_line":"     - System"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_92a47709","line":181,"in_reply_to":"baada198_38991ed1","updated":"2014-08-21 15:14:37.000000000","message":"Done","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":9126,"name":"Chris Buccella","email":"chris@buccella.org","username":"hdd"},"change_message_id":"5e418007d4b0558729daffe625e79e3fbfd1b429","unresolved":false,"context_lines":[{"line_number":393,"context_line":"  artifact may have any number of blobs of this kind."},{"line_number":394,"context_line":"* **Required** (boolean) - a flag indicating if the blob(s) of this kind are"},{"line_number":395,"context_line":"  required for the artifact to be valid."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"  *For example, the above-mentioned artifact type “Heat template” may define"},{"line_number":398,"context_line":"  an optional BLOB kind with the Name set to “ProviderTemplate” and Count equal"},{"line_number":399,"context_line":"  to “None”, and a required BLOB kind with the name “Icon” and the Count equal"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_eec44043","line":396,"updated":"2014-07-15 21:49:34.000000000","message":"Would it be useful to also have a type property for the blob? For example, a stored VM image may be in various formats (OVF, VMDK, etc)","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":393,"context_line":"  artifact may have any number of blobs of this kind."},{"line_number":394,"context_line":"* **Required** (boolean) - a flag indicating if the blob(s) of this kind are"},{"line_number":395,"context_line":"  required for the artifact to be valid."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"  *For example, the above-mentioned artifact type “Heat template” may define"},{"line_number":398,"context_line":"  an optional BLOB kind with the Name set to “ProviderTemplate” and Count equal"},{"line_number":399,"context_line":"  to “None”, and a required BLOB kind with the name “Icon” and the Count equal"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_1254e7c8","line":396,"in_reply_to":"baada198_eec44043","updated":"2014-08-21 15:14:37.000000000","message":"This looks more like a metadata field. I would prefer \"Image Format\" to be a type-specific metadata field, and it defines the type of the appropriate BLOB.","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"c56bf14a2a1f14f3e872b92f3a03b03888a9f37d","unresolved":false,"context_lines":[{"line_number":395,"context_line":"  required for the artifact to be valid."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"  *For example, the above-mentioned artifact type “Heat template” may define"},{"line_number":398,"context_line":"  an optional BLOB kind with the Name set to “ProviderTemplate” and Count equal"},{"line_number":399,"context_line":"  to “None”, and a required BLOB kind with the name “Icon” and the Count equal"},{"line_number":400,"context_line":"  to “1”."},{"line_number":401,"context_line":"  This means that the artifacts of this type have to contain exactly one icon"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_afe038fb","line":398,"updated":"2014-07-10 12:19:35.000000000","message":"A \"ProviderTemplate\" is actually also \u0027just\u0027 a Heat template that someone might also create a stack from independently. So \"provider templates\" for the overall artifact could just be a list of links to other Heat Template artifacts.\n\nAnyway, I think those details orthogonal to the implementation and we could select to \"inline\" artifacts as blobs or store them as complete separate artifacts and link them. In that sense, also your original example could be handled. Maybe this kind of linking (if it makes sense to you) could be mentioned in the spec.","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":395,"context_line":"  required for the artifact to be valid."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"  *For example, the above-mentioned artifact type “Heat template” may define"},{"line_number":398,"context_line":"  an optional BLOB kind with the Name set to “ProviderTemplate” and Count equal"},{"line_number":399,"context_line":"  to “None”, and a required BLOB kind with the name “Icon” and the Count equal"},{"line_number":400,"context_line":"  to “1”."},{"line_number":401,"context_line":"  This means that the artifacts of this type have to contain exactly one icon"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_52049fc5","line":398,"in_reply_to":"baada198_afe038fb","updated":"2014-08-21 15:14:37.000000000","message":"This linking are mentioned below","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":9126,"name":"Chris Buccella","email":"chris@buccella.org","username":"hdd"},"change_message_id":"5e418007d4b0558729daffe625e79e3fbfd1b429","unresolved":false,"context_lines":[{"line_number":481,"context_line":"  uploaded or location uri for pre-uploaded blobs may be specified, the"},{"line_number":482,"context_line":"  dependencies may be set or modified."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"  Artifacts in the CREATING state are not visible to tenants other then owners\u0027"},{"line_number":485,"context_line":"  even if the \u0027IsPublic\u0027 field is set to \u0027True\u0027."},{"line_number":486,"context_line":"  Artifacts in the CREATING state cannot be shared using sharing APIs."},{"line_number":487,"context_line":"  When artifact is in the CREATING state its owner may call a \u0027Publish\u0027 API"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_eea9a0de","line":484,"updated":"2014-07-15 21:49:34.000000000","message":"\"then owners\u0027\" -\u003e \"than the owner\u0027s\"","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":481,"context_line":"  uploaded or location uri for pre-uploaded blobs may be specified, the"},{"line_number":482,"context_line":"  dependencies may be set or modified."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"  Artifacts in the CREATING state are not visible to tenants other then owners\u0027"},{"line_number":485,"context_line":"  even if the \u0027IsPublic\u0027 field is set to \u0027True\u0027."},{"line_number":486,"context_line":"  Artifacts in the CREATING state cannot be shared using sharing APIs."},{"line_number":487,"context_line":"  When artifact is in the CREATING state its owner may call a \u0027Publish\u0027 API"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_d21eef0c","line":484,"in_reply_to":"baada198_eea9a0de","updated":"2014-08-21 15:14:37.000000000","message":"Done","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":9126,"name":"Chris Buccella","email":"chris@buccella.org","username":"hdd"},"change_message_id":"5e418007d4b0558729daffe625e79e3fbfd1b429","unresolved":false,"context_lines":[{"line_number":490,"context_line":"  When the artifact is in CREATING state its owner may initiate its deletion."},{"line_number":491,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"* **ACTIVE** state indicates that the artifact is available for the usage."},{"line_number":494,"context_line":"  When the artifact is in this state the immutable metadata fields may not be"},{"line_number":495,"context_line":"  updated, no new binary data may be uploaded, existing data may not be deleted."},{"line_number":496,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_aef6c8f7","line":493,"updated":"2014-07-15 21:49:34.000000000","message":"\"available for the usage\" -\u003e \"available for use\"","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":490,"context_line":"  When the artifact is in CREATING state its owner may initiate its deletion."},{"line_number":491,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"* **ACTIVE** state indicates that the artifact is available for the usage."},{"line_number":494,"context_line":"  When the artifact is in this state the immutable metadata fields may not be"},{"line_number":495,"context_line":"  updated, no new binary data may be uploaded, existing data may not be deleted."},{"line_number":496,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_f2193324","line":493,"in_reply_to":"baada198_aef6c8f7","updated":"2014-08-21 15:14:37.000000000","message":"Done","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c6369f77c0e8233b34d4f57d71764e7487626bb4","unresolved":false,"context_lines":[{"line_number":511,"context_line":"  until the deactivation is removed."},{"line_number":512,"context_line":"  Usually this is used for investigations of reported problems with artifacts."},{"line_number":513,"context_line":"  When the investigation is completed the artifact may be reactivated again (by"},{"line_number":514,"context_line":"  changing the state back to ACTIVE) or deleted."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"* **DELETED** state indicates that the artifact has been deleted and its data"},{"line_number":517,"context_line":"  and metadata objects are not accessible anymore."}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_5f7103df","line":514,"updated":"2014-07-10 15:27:21.000000000","message":"So please correct the state transition diagram - admin could delete DEACTIVATED artifact.","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":511,"context_line":"  until the deactivation is removed."},{"line_number":512,"context_line":"  Usually this is used for investigations of reported problems with artifacts."},{"line_number":513,"context_line":"  When the investigation is completed the artifact may be reactivated again (by"},{"line_number":514,"context_line":"  changing the state back to ACTIVE) or deleted."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"* **DELETED** state indicates that the artifact has been deleted and its data"},{"line_number":517,"context_line":"  and metadata objects are not accessible anymore."}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_52ed7f8d","line":514,"in_reply_to":"baada198_5f7103df","updated":"2014-08-21 15:14:37.000000000","message":"Done","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c6369f77c0e8233b34d4f57d71764e7487626bb4","unresolved":false,"context_lines":[{"line_number":521,"context_line":"  artifacts are just marked as deleted, however the actual deletion is delayed"},{"line_number":522,"context_line":"  for the configurable amount of time. During this interval of time the"},{"line_number":523,"context_line":"  metadata fields and data objects of the artifact are not unavailable for"},{"line_number":524,"context_line":"  usage, but the artifact may be restored (i.e. its deletion is cancelled and"},{"line_number":525,"context_line":"  the data and metadata become available again)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"  If delayed_delete is disabled, then artifacts do not enter the DELETED state,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_a246861f","line":524,"updated":"2014-07-10 15:27:21.000000000","message":"Do we really need restore function? Currently Glance sees delayed_delete as an internal implementation of deletion (for performance improvement) instead of an external function for end user. If we needs this, we need to allow end user access metadata of artifact since end user needs a chance to know/list (API) which DELETED artifact he can restore.","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"192b9f0021ebc6908228feae097730013622b799","unresolved":false,"context_lines":[{"line_number":521,"context_line":"  artifacts are just marked as deleted, however the actual deletion is delayed"},{"line_number":522,"context_line":"  for the configurable amount of time. During this interval of time the"},{"line_number":523,"context_line":"  metadata fields and data objects of the artifact are not unavailable for"},{"line_number":524,"context_line":"  usage, but the artifact may be restored (i.e. its deletion is cancelled and"},{"line_number":525,"context_line":"  the data and metadata become available again)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"  If delayed_delete is disabled, then artifacts do not enter the DELETED state,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_7297e3eb","line":524,"in_reply_to":"baada198_a246861f","updated":"2014-08-21 15:14:37.000000000","message":"I would prefer to have this feature. You are right: metadata for DELETED artifacts should be accessible.","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"c6369f77c0e8233b34d4f57d71764e7487626bb4","unresolved":false,"context_lines":[{"line_number":529,"context_line":"  operation is executed."},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"A state transition diagram can be found `here"},{"line_number":532,"context_line":"\u003chttps://wiki.openstack.org/w/images/0/05/Artifact_states.png\u003e`_."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"**Composing an Artifact**"},{"line_number":535,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_226276ad","line":532,"updated":"2014-07-10 15:27:21.000000000","message":"Thanks","commit_id":"bf4019129a1aaa20e8f26c36adafe889c4550b59"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"45e4850bc481820534331626376d0dbbb4514d33","unresolved":false,"context_lines":[{"line_number":196,"context_line":"     - Alphanumeric string, 50 characters max"},{"line_number":197,"context_line":"     - Defines the name of the artifact."},{"line_number":198,"context_line":"       Altogether with Type and Version forms a Natural Key of the artifact,"},{"line_number":199,"context_line":"       i.e. identifies it within a catalog in a unique way."},{"line_number":200,"context_line":"   * - Version"},{"line_number":201,"context_line":"     - Immutable"},{"line_number":202,"context_line":"     - Yes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_9e6c3909","line":199,"updated":"2014-08-01 18:25:30.000000000","message":"Current images can have a name of 255 in length. If this is to someday support images as well, shouldn\u0027t it support the same length?","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1983a97da89b0898f1844df4d369dea886f64c20","unresolved":false,"context_lines":[{"line_number":196,"context_line":"     - Alphanumeric string, 50 characters max"},{"line_number":197,"context_line":"     - Defines the name of the artifact."},{"line_number":198,"context_line":"       Altogether with Type and Version forms a Natural Key of the artifact,"},{"line_number":199,"context_line":"       i.e. identifies it within a catalog in a unique way."},{"line_number":200,"context_line":"   * - Version"},{"line_number":201,"context_line":"     - Immutable"},{"line_number":202,"context_line":"     - Yes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1abeadc6_1ce66b15","line":199,"in_reply_to":"baada198_9e6c3909","updated":"2014-08-21 15:14:45.000000000","message":"Done","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"45e4850bc481820534331626376d0dbbb4514d33","unresolved":false,"context_lines":[{"line_number":213,"context_line":"     - No"},{"line_number":214,"context_line":"     - Set of alphanumeric strings, each 20 characters max"},{"line_number":215,"context_line":"     - A set of arbitrary string labels associated with the artifact for"},{"line_number":216,"context_line":"       search and filter capabilities"},{"line_number":217,"context_line":"   * - IsPublic"},{"line_number":218,"context_line":"     - Mutable"},{"line_number":219,"context_line":"     - Yes"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_1e8ae9bb","line":216,"updated":"2014-08-01 18:25:30.000000000","message":"Why 20 characters?  Current tags on images are allowed to be 255.  In the metadata definitions catalog we went with 80 characters after the Nova guys told us that 80 characters was a good performance point - See: Nova tags are allowed to be 80 characters: https://github.com/openstack/nova-specs/blob/master/specs/juno/tag-instances.rst\n\nWhatever the case, we probably should make sure that the tag lengths make sense in all scenarios.","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"45e4850bc481820534331626376d0dbbb4514d33","unresolved":false,"context_lines":[{"line_number":222,"context_line":"       tenants in the cloud. If set to false, the artifact is accessible only"},{"line_number":223,"context_line":"       to the users of the tenant its owner belongs to."},{"line_number":224,"context_line":"       Policies may be used to restrict setting of this field to cloud"},{"line_number":225,"context_line":"       administrators (to prevent artifact-sharing-spam scenarios)"},{"line_number":226,"context_line":"   * - State"},{"line_number":227,"context_line":"     - System"},{"line_number":228,"context_line":"     - N/A"}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_1e7829c0","line":225,"updated":"2014-08-01 18:25:30.000000000","message":"This should be \"visibility\" with valid values of public / private.  Community and shared to come later as per the mini-summit.","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1983a97da89b0898f1844df4d369dea886f64c20","unresolved":false,"context_lines":[{"line_number":222,"context_line":"       tenants in the cloud. If set to false, the artifact is accessible only"},{"line_number":223,"context_line":"       to the users of the tenant its owner belongs to."},{"line_number":224,"context_line":"       Policies may be used to restrict setting of this field to cloud"},{"line_number":225,"context_line":"       administrators (to prevent artifact-sharing-spam scenarios)"},{"line_number":226,"context_line":"   * - State"},{"line_number":227,"context_line":"     - System"},{"line_number":228,"context_line":"     - N/A"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1abeadc6_fccfef7c","line":225,"in_reply_to":"baada198_1e7829c0","updated":"2014-08-21 15:14:45.000000000","message":"Done","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"45e4850bc481820534331626376d0dbbb4514d33","unresolved":false,"context_lines":[{"line_number":266,"context_line":"     - Timestamp"},{"line_number":267,"context_line":"     - Time when the artifact was deleted, i.e. moved from CREATING, ACTIVE or"},{"line_number":268,"context_line":"       DEACTIVATED state to DELETED. Is empty for artifacts not in DELETED"},{"line_number":269,"context_line":"       state"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"**Type-specific metadata fields**"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_9e3a79e4","line":269,"updated":"2014-08-01 18:25:30.000000000","message":"Where are properties (key/value)?  Why not allow general properties on all artifacts like images today for specifying extra metadata?","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1983a97da89b0898f1844df4d369dea886f64c20","unresolved":false,"context_lines":[{"line_number":266,"context_line":"     - Timestamp"},{"line_number":267,"context_line":"     - Time when the artifact was deleted, i.e. moved from CREATING, ACTIVE or"},{"line_number":268,"context_line":"       DEACTIVATED state to DELETED. Is empty for artifacts not in DELETED"},{"line_number":269,"context_line":"       state"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"**Type-specific metadata fields**"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1abeadc6_fccb6f50","line":269,"in_reply_to":"baada198_9e3a79e4","updated":"2014-08-21 15:14:45.000000000","message":"The concept of \"General properties\" contradicts with the idea of having very specific, strict set of metadata fields, defined by the artifact plugins. If we have \"general properties\", the users may have a temptation to use them instead of defining strict artifact type. We do not want to encourage such behaviour.\n\nHowever, we may need special bindings to store metadef value for artifacts. Let\u0027s discuss this later when the metadefs are merged.","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"45e4850bc481820534331626376d0dbbb4514d33","unresolved":false,"context_lines":[{"line_number":305,"context_line":"* **Internal** - a boolean value indicating that the value of this field is not"},{"line_number":306,"context_line":"  shown to the end-user (cannot be fetched using API or used in queries), but"},{"line_number":307,"context_line":"  may be accessed internally by the plugin logic."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"**Artifact Versions**"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_399fc766","line":308,"updated":"2014-08-01 18:25:30.000000000","message":"I don\u0027t see boolean.\n\nWe should be able to support the same types that can be described in the metadata definitions catalog and be able to leverage that syntax.  \n\nThe following are the types the defintions catalog supports: \n\nstring, integer, number, boolean, array\n\nWe are also able to define pretty tight constraints on these, which probably will be useful here as well. For example:\n\nString: minLength, maxLength, pattern\nInteger and Number: minimum, maximum\nArray: possible values, min select, max select, additional items\n\nAlso, a default value can be specified.\n\nI assume that plugins will be responsible for validating inputs?  It this was defined / exportable to metadata definition syntax, then we could leverage common code to do the validation. \n\nThere also is a follow-up blueprint we are submitting shortly on the metadata definitions catalog to allow for a namespaces to specify a validator plugin in the event that additional custom validation is needed beyond the base syntax.","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1983a97da89b0898f1844df4d369dea886f64c20","unresolved":false,"context_lines":[{"line_number":305,"context_line":"* **Internal** - a boolean value indicating that the value of this field is not"},{"line_number":306,"context_line":"  shown to the end-user (cannot be fetched using API or used in queries), but"},{"line_number":307,"context_line":"  may be accessed internally by the plugin logic."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"**Artifact Versions**"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1abeadc6_ff3b61ce","line":308,"in_reply_to":"baada198_399fc766","updated":"2014-08-21 15:14:45.000000000","message":"Done","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"45e4850bc481820534331626376d0dbbb4514d33","unresolved":false,"context_lines":[{"line_number":325,"context_line":"stand for 10.0.0, 5.1 will stand for 5.1.0. The repository will accept such an"},{"line_number":326,"context_line":"input and will convert it to the fill semver notation."},{"line_number":327,"context_line":"The major version part is mandatory."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"**Binary Data**"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_6b408606","line":328,"updated":"2014-08-01 18:25:30.000000000","message":"Maybe make a note that either major or minor version is required to be non-zero.  For example, a major of 0 is okay if minor is non-zero.  Eg.. 0.10 is acceptable (pre-release). I know semver.org has all the rules, including this one.  But as long as you are showing examples, this might be a good one to show.","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1983a97da89b0898f1844df4d369dea886f64c20","unresolved":false,"context_lines":[{"line_number":325,"context_line":"stand for 10.0.0, 5.1 will stand for 5.1.0. The repository will accept such an"},{"line_number":326,"context_line":"input and will convert it to the fill semver notation."},{"line_number":327,"context_line":"The major version part is mandatory."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"**Binary Data**"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1abeadc6_ff69a1be","line":328,"in_reply_to":"baada198_6b408606","updated":"2014-08-21 15:14:45.000000000","message":"Done","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":7193,"name":"Thomas Spatzier","email":"thomas.spatzier@icloud.com","username":"thomasspatzier"},"change_message_id":"30800e9a00a42743c41bca18a346fc9104e98e25","unresolved":false,"context_lines":[{"line_number":490,"context_line":"  When the artifact is in CREATING state its owner may initiate its deletion."},{"line_number":491,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"* **ACTIVE** state indicates that the artifact is available for the use."},{"line_number":494,"context_line":"  When the artifact is in this state the immutable metadata fields may not be"},{"line_number":495,"context_line":"  updated, no new binary data may be uploaded, existing data may not be deleted."},{"line_number":496,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"baada198_007a9c87","line":493,"updated":"2014-07-18 15:52:50.000000000","message":"Referrring to Chris\u0027 comment on patch set 5: the end should read \u0027available for use\u0027 (not \u0027for the use\u0027).","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1983a97da89b0898f1844df4d369dea886f64c20","unresolved":false,"context_lines":[{"line_number":490,"context_line":"  When the artifact is in CREATING state its owner may initiate its deletion."},{"line_number":491,"context_line":"  This will change the state of the artifact to ‘DELETED’."},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"* **ACTIVE** state indicates that the artifact is available for the use."},{"line_number":494,"context_line":"  When the artifact is in this state the immutable metadata fields may not be"},{"line_number":495,"context_line":"  updated, no new binary data may be uploaded, existing data may not be deleted."},{"line_number":496,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1abeadc6_5f18d574","line":493,"in_reply_to":"baada198_007a9c87","updated":"2014-08-21 15:14:45.000000000","message":"Done","commit_id":"2edf104909b7720046fef8f9d18236f1c5ad764a"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Each plugin defines a version for each of its artifact types. This version"},{"line_number":135,"context_line":"information is persisted with the artifact metadata to allow artifact type"},{"line_number":136,"context_line":"versioning and migrations in future."},{"line_number":137,"context_line":"For now only a single version of each artifact type may be active at any moment"},{"line_number":138,"context_line":"of time."},{"line_number":139,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_e7894176","line":136,"updated":"2014-10-03 17:53:01.000000000","message":"How do you think the version information provided? Should it be retrieved from the artifact blob like OVA package, or should it be provided explicitly by user?","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Each plugin defines a version for each of its artifact types. This version"},{"line_number":135,"context_line":"information is persisted with the artifact metadata to allow artifact type"},{"line_number":136,"context_line":"versioning and migrations in future."},{"line_number":137,"context_line":"For now only a single version of each artifact type may be active at any moment"},{"line_number":138,"context_line":"of time."},{"line_number":139,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_2d8e4a28","line":136,"in_reply_to":"baa201ad_e7894176","updated":"2014-10-09 16:33:28.000000000","message":"Both approaches are possible: if the artifact is created interactively (see \"composing an artifact\" below) then it may be set by appropriate API call. If  the artifact is imported from a single file (see \"importing an artifact\"), then it may be (and should be!) parsed from the blob by custom plugin logic.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"information is persisted with the artifact metadata to allow artifact type"},{"line_number":136,"context_line":"versioning and migrations in future."},{"line_number":137,"context_line":"For now only a single version of each artifact type may be active at any moment"},{"line_number":138,"context_line":"of time."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"To enable a plugin the cloud operator has to place the python module into"},{"line_number":141,"context_line":"the appropriate directory of the node which runs Glance and make appropriate"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_c79d1dbe","line":138,"updated":"2014-10-03 17:53:01.000000000","message":"This may cause issue to the OVF support because of multiple OVF version existed already.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"f7e8192b9aa8ce54a6f39341340a116645cb736c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"information is persisted with the artifact metadata to allow artifact type"},{"line_number":136,"context_line":"versioning and migrations in future."},{"line_number":137,"context_line":"For now only a single version of each artifact type may be active at any moment"},{"line_number":138,"context_line":"of time."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"To enable a plugin the cloud operator has to place the python module into"},{"line_number":141,"context_line":"the appropriate directory of the node which runs Glance and make appropriate"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_b4f316e6","line":138,"in_reply_to":"baa201ad_4d938e4f","updated":"2014-10-13 17:36:10.000000000","message":"Sure, migration between versions should be complex and should be done in future.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":135,"context_line":"information is persisted with the artifact metadata to allow artifact type"},{"line_number":136,"context_line":"versioning and migrations in future."},{"line_number":137,"context_line":"For now only a single version of each artifact type may be active at any moment"},{"line_number":138,"context_line":"of time."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"To enable a plugin the cloud operator has to place the python module into"},{"line_number":141,"context_line":"the appropriate directory of the node which runs Glance and make appropriate"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_4d938e4f","line":138,"in_reply_to":"baa201ad_c79d1dbe","updated":"2014-10-09 16:33:28.000000000","message":"I am currently investigating how to add support for multiple versions of the type. However, migrations of artifacts between different versions of the artifact type is unlikely for now.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":185,"context_line":"     - N/A"},{"line_number":186,"context_line":"     - String following SemVer notation"},{"line_number":187,"context_line":"     - A system field defining the version of artifact type, i.e. the version"},{"line_number":188,"context_line":"       of the plugin which contains the artifact type definition."},{"line_number":189,"context_line":"       The value is set automatically when the artifact record is created."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"       In future, this may be used to do automatic or manual migrations of"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_a7a81978","line":188,"updated":"2014-10-03 17:53:01.000000000","message":"This mechanism in fact make the artifact version is same as plugin version? Does that mean whenever a new version created, a new plugin should be developed?","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":185,"context_line":"     - N/A"},{"line_number":186,"context_line":"     - String following SemVer notation"},{"line_number":187,"context_line":"     - A system field defining the version of artifact type, i.e. the version"},{"line_number":188,"context_line":"       of the plugin which contains the artifact type definition."},{"line_number":189,"context_line":"       The value is set automatically when the artifact record is created."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"       In future, this may be used to do automatic or manual migrations of"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_ed4c42cb","line":188,"in_reply_to":"baa201ad_a7a81978","updated":"2014-10-09 16:33:28.000000000","message":"There is a \"Type Version\" and the \"Artifact Version\". \n\"Type Version\" is the version of the plugin (i.e. version of the artifact schema), while the \"artifact version\" is the version of particular artifact entity (i.e. multiple artifacts may share the same type version but have different artifact versions)","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"6844a47260cb697eb42cfe80fa0519cb7933c52a","unresolved":false,"context_lines":[{"line_number":185,"context_line":"     - N/A"},{"line_number":186,"context_line":"     - String following SemVer notation"},{"line_number":187,"context_line":"     - A system field defining the version of artifact type, i.e. the version"},{"line_number":188,"context_line":"       of the plugin which contains the artifact type definition."},{"line_number":189,"context_line":"       The value is set automatically when the artifact record is created."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"       In future, this may be used to do automatic or manual migrations of"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_f8019e05","line":188,"in_reply_to":"baa201ad_d4197a23","updated":"2014-10-17 01:13:47.000000000","message":"yunhong-jiang\u0027s comment still seems applicable. I guess this means all plugins will have to be backwards compatible or you\u0027d have to support multiple versions of a plugin concurrently. I see your comment above about investigating this.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"f7e8192b9aa8ce54a6f39341340a116645cb736c","unresolved":false,"context_lines":[{"line_number":185,"context_line":"     - N/A"},{"line_number":186,"context_line":"     - String following SemVer notation"},{"line_number":187,"context_line":"     - A system field defining the version of artifact type, i.e. the version"},{"line_number":188,"context_line":"       of the plugin which contains the artifact type definition."},{"line_number":189,"context_line":"       The value is set automatically when the artifact record is created."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"       In future, this may be used to do automatic or manual migrations of"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_d4197a23","line":188,"in_reply_to":"baa201ad_ed4c42cb","updated":"2014-10-13 17:36:10.000000000","message":"Sorry for confusion. I\u0027m talking about the type version in my original comment.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"       In future, this may be used to do automatic or manual migrations of"},{"line_number":192,"context_line":"       artifacts data and metadata."},{"line_number":193,"context_line":"   * - Name"},{"line_number":194,"context_line":"     - Immutable"},{"line_number":195,"context_line":"     - Yes"},{"line_number":196,"context_line":"     - Alphanumeric string, 255 characters max"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_c7b8bdca","line":193,"updated":"2014-10-03 17:53:01.000000000","message":"What\u0027s the difference of this name and the first item?","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"f7e8192b9aa8ce54a6f39341340a116645cb736c","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"       In future, this may be used to do automatic or manual migrations of"},{"line_number":192,"context_line":"       artifacts data and metadata."},{"line_number":193,"context_line":"   * - Name"},{"line_number":194,"context_line":"     - Immutable"},{"line_number":195,"context_line":"     - Yes"},{"line_number":196,"context_line":"     - Alphanumeric string, 255 characters max"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_b4c87676","line":193,"in_reply_to":"baa201ad_6dd052ca","updated":"2014-10-13 17:36:10.000000000","message":"Aha, got it , but a bit confusing IMHO.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"       In future, this may be used to do automatic or manual migrations of"},{"line_number":192,"context_line":"       artifacts data and metadata."},{"line_number":193,"context_line":"   * - Name"},{"line_number":194,"context_line":"     - Immutable"},{"line_number":195,"context_line":"     - Yes"},{"line_number":196,"context_line":"     - Alphanumeric string, 255 characters max"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_6dd052ca","line":193,"in_reply_to":"baa201ad_c7b8bdca","updated":"2014-10-09 16:33:28.000000000","message":"First item is just a header of the table when it is completed from RST  :)","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":195,"context_line":"     - Yes"},{"line_number":196,"context_line":"     - Alphanumeric string, 255 characters max"},{"line_number":197,"context_line":"     - Defines the name of the artifact."},{"line_number":198,"context_line":"       Altogether with Type and Version forms a Natural Key of the artifact,"},{"line_number":199,"context_line":"       i.e. identifies it within a catalog in a unique way."},{"line_number":200,"context_line":"   * - Version"},{"line_number":201,"context_line":"     - Immutable"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_a7e01997","line":198,"updated":"2014-10-03 17:53:01.000000000","message":"Does nature key means unique identification?","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"f7e8192b9aa8ce54a6f39341340a116645cb736c","unresolved":false,"context_lines":[{"line_number":195,"context_line":"     - Yes"},{"line_number":196,"context_line":"     - Alphanumeric string, 255 characters max"},{"line_number":197,"context_line":"     - Defines the name of the artifact."},{"line_number":198,"context_line":"       Altogether with Type and Version forms a Natural Key of the artifact,"},{"line_number":199,"context_line":"       i.e. identifies it within a catalog in a unique way."},{"line_number":200,"context_line":"   * - Version"},{"line_number":201,"context_line":"     - Immutable"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_54abca88","line":198,"in_reply_to":"baa201ad_2ded6a8f","updated":"2014-10-13 17:36:10.000000000","message":"make sense.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":195,"context_line":"     - Yes"},{"line_number":196,"context_line":"     - Alphanumeric string, 255 characters max"},{"line_number":197,"context_line":"     - Defines the name of the artifact."},{"line_number":198,"context_line":"       Altogether with Type and Version forms a Natural Key of the artifact,"},{"line_number":199,"context_line":"       i.e. identifies it within a catalog in a unique way."},{"line_number":200,"context_line":"   * - Version"},{"line_number":201,"context_line":"     - Immutable"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_2ded6a8f","line":198,"in_reply_to":"baa201ad_a7e01997","updated":"2014-10-09 16:33:28.000000000","message":"Yes, but only within a given scope: i.e. within a single tenant there can be no duplication of this combination, while other tenants may have them","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"6844a47260cb697eb42cfe80fa0519cb7933c52a","unresolved":false,"context_lines":[{"line_number":268,"context_line":"     - Time when the artifact was deleted, i.e. moved from CREATING, ACTIVE or"},{"line_number":269,"context_line":"       DEACTIVATED state to DELETED. Is empty for artifacts not in DELETED"},{"line_number":270,"context_line":"       state"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"**Type-specific metadata fields**"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"For each type of artifact, additional metadata fields may be defined."}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_f860bea6","line":271,"updated":"2014-10-17 01:13:47.000000000","message":"In patch set 6, I mentioned the use of additional properties.  I agree with your comments about encouraging people to use type specific properties as much as possible, but the reason I mentioned this is multiple fold.\n\n1) If this is to eventually replaces existing images functionality it needs to be there. These additional properties on images today are used for a lot of purposes.  They really help to drive scheduler and driver behavior that is independent of type specific properties.\n\n2) We\u0027ve had some interesting discussions with congress project folks and they are very interested in using properties as a way to help them define and evaluate policy rules.\n\n3) Some artifacts may be not be able to decomposed into different artifacts, but still represent composites. For example, a given image (or container) may actually have many different software components and versions embedded in it. An example would be a simple LAMP stack. Aside from version of apache, mysql, etc, There may be other interesting properties that are baked in and useful to know, but that the plugin doesn\u0027t need to understand natively. Even in the Simple LAMP case, there is the possibility that when the software is started that it has a different port number that Apache and MySQL listen on.  This could be publicized using properties. Of course in the case of orchestration, those may be modifiable inputs, but not always the case.\n\nLAMP on a single instance is very limiting, but even if you consider something like Tomcat.  Tomcat is dependent on Java.  These are two independent pieces of software and each may have independent properties that are important, but are stored within a single artifact.\n\nI\u0027ve got a WIP spec related to improvements to the launch instance UI and Image details UI.  It is early and I will try to update it tomorrow, but the basics of it are about how we\u0027ll be able to create metadata definitions of both tags and properties for things like software components that can be annotated across images, instances, volumes, various artifacts, etc and then back referenced from the definition catalog to get a consistent and searchable view across these various resource to understand what is really on each resource.  \n\nI really like the work you are doing here and I\u0027d like to talk further about these concepts.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"6844a47260cb697eb42cfe80fa0519cb7933c52a","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    this field. Such field may be used for tag-like filtering semantics (i.e."},{"line_number":293,"context_line":"    the artifacts of some type may have a set field called ‘Category’, each"},{"line_number":294,"context_line":"    such artifact may have a number of categories assigned, and the filtering"},{"line_number":295,"context_line":"    query may be made to list only the artifacts having the specific category)"},{"line_number":296,"context_line":"  * *Integer*. - integer field. In listing queries may use this field to"},{"line_number":297,"context_line":"    filter artifacts by both value equality and value range (e.g. “filter all"},{"line_number":298,"context_line":"    the artifacts of type ‘Image’ having the field ‘REQUIRED_RAM’ less or equal"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_1864a2b7","line":295,"updated":"2014-10-17 01:13:47.000000000","message":"Looks like this needs to be updated to reflect the comments and work in your patch.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":324,"context_line":"The Artifact repository is able to store different versions of the same"},{"line_number":325,"context_line":"artifact. From repository\u0027s point of view these are different objects"},{"line_number":326,"context_line":"(having different IDs, stored independently and having independent"},{"line_number":327,"context_line":"lifecycle), but having the same type and name, but different version fields."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"The version field is one of common immutable metadata fields (see above)."},{"line_number":330,"context_line":"It follows the `SemVer notation \u003chttp://semver.org\u003e`_, i.e. its value is"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_67c9d158","line":327,"updated":"2014-10-03 17:53:01.000000000","message":"This is a echo to above question. Is the \"type\"+\"name\" assumed to be unique identification?","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":324,"context_line":"The Artifact repository is able to store different versions of the same"},{"line_number":325,"context_line":"artifact. From repository\u0027s point of view these are different objects"},{"line_number":326,"context_line":"(having different IDs, stored independently and having independent"},{"line_number":327,"context_line":"lifecycle), but having the same type and name, but different version fields."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"The version field is one of common immutable metadata fields (see above)."},{"line_number":330,"context_line":"It follows the `SemVer notation \u003chttp://semver.org\u003e`_, i.e. its value is"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_edfa8242","line":327,"in_reply_to":"baa201ad_67c9d158","updated":"2014-10-09 16:33:28.000000000","message":"type+name+version is assumed to be unique within a single scope.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"6844a47260cb697eb42cfe80fa0519cb7933c52a","unresolved":false,"context_lines":[{"line_number":324,"context_line":"The Artifact repository is able to store different versions of the same"},{"line_number":325,"context_line":"artifact. From repository\u0027s point of view these are different objects"},{"line_number":326,"context_line":"(having different IDs, stored independently and having independent"},{"line_number":327,"context_line":"lifecycle), but having the same type and name, but different version fields."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"The version field is one of common immutable metadata fields (see above)."},{"line_number":330,"context_line":"It follows the `SemVer notation \u003chttp://semver.org\u003e`_, i.e. its value is"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_7874ce67","line":327,"in_reply_to":"baa201ad_edfa8242","updated":"2014-10-17 01:13:47.000000000","message":"Apparently there is some nested project concept being discussed.  So you can have projects in projects.  I don\u0027t know much about it, but had somebody mention it to me.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":406,"context_line":"  amount of blobs of this kind per artifact. If set to None, then each"},{"line_number":407,"context_line":"  artifact may have any number of blobs of this kind."},{"line_number":408,"context_line":"* **Required** (boolean) - a flag indicating if the blob(s) of this kind are"},{"line_number":409,"context_line":"  required for the artifact to be valid."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"  *For example, the above-mentioned artifact type “Heat template” may define"},{"line_number":412,"context_line":"  an optional BLOB kind with the Name set to “ProviderTemplate” and Count equal"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_47792dc7","line":409,"updated":"2014-10-03 17:53:01.000000000","message":"For OVF support, this information is OVF package specific, thus can\u0027t be predefined in the plugin.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":406,"context_line":"  amount of blobs of this kind per artifact. If set to None, then each"},{"line_number":407,"context_line":"  artifact may have any number of blobs of this kind."},{"line_number":408,"context_line":"* **Required** (boolean) - a flag indicating if the blob(s) of this kind are"},{"line_number":409,"context_line":"  required for the artifact to be valid."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"  *For example, the above-mentioned artifact type “Heat template” may define"},{"line_number":412,"context_line":"  an optional BLOB kind with the Name set to “ProviderTemplate” and Count equal"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_b0ad2ded","line":409,"in_reply_to":"baa201ad_47792dc7","updated":"2014-10-09 16:33:28.000000000","message":"In this case, the field should not be made required and a custom plugin-based validation logic should be used to validate it.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"f7e8192b9aa8ce54a6f39341340a116645cb736c","unresolved":false,"context_lines":[{"line_number":406,"context_line":"  amount of blobs of this kind per artifact. If set to None, then each"},{"line_number":407,"context_line":"  artifact may have any number of blobs of this kind."},{"line_number":408,"context_line":"* **Required** (boolean) - a flag indicating if the blob(s) of this kind are"},{"line_number":409,"context_line":"  required for the artifact to be valid."},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"  *For example, the above-mentioned artifact type “Heat template” may define"},{"line_number":412,"context_line":"  an optional BLOB kind with the Name set to “ProviderTemplate” and Count equal"}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_148f8224","line":409,"in_reply_to":"baa201ad_b0ad2ded","updated":"2014-10-13 17:36:10.000000000","message":"Agree.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"065e5bb41e84e9dfa9a88cac2df9afa4ce4a4ac4","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"In OpenStack ecosystems the entities rarely go alone: usually they interact"},{"line_number":438,"context_line":"with each other. Artifacts aren\u0027t different: quite often an artifact may need"},{"line_number":439,"context_line":"to work with other artifacts in one way or another."},{"line_number":440,"context_line":"In this case it may be reasonable to introduce a concept of *Artifact"},{"line_number":441,"context_line":"Dependency*: an artifact may depend on any number of other artifacts of any"},{"line_number":442,"context_line":"type."}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_a701f907","line":439,"updated":"2014-10-03 17:53:01.000000000","message":"Some thoughts about OVF. Considering a OVA package includes several images. The end user upload a OVA package, which will be parsed. The image files will be retrieved out. Should there image files is just blob of the OVA artifact, or will the image files becomes different artifact (if we assume image is also one type of artifact) and be connected back to the OVA package artifact as dependency? I\u0027d prefer to the latter, but that means one upload action will create multiple artifacts, and setup the relationship between them, is that acceptable?","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"0d905f073e3dde36b2f6c940ca6d09fcf0590829","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"In OpenStack ecosystems the entities rarely go alone: usually they interact"},{"line_number":438,"context_line":"with each other. Artifacts aren\u0027t different: quite often an artifact may need"},{"line_number":439,"context_line":"to work with other artifacts in one way or another."},{"line_number":440,"context_line":"In this case it may be reasonable to introduce a concept of *Artifact"},{"line_number":441,"context_line":"Dependency*: an artifact may depend on any number of other artifacts of any"},{"line_number":442,"context_line":"type."}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_b0db6d7c","line":439,"in_reply_to":"baa201ad_a701f907","updated":"2014-10-09 16:33:28.000000000","message":"For now we assume the former: a single importing should create a single artifact. At later cycles we may think about later approach asa well","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"f7e8192b9aa8ce54a6f39341340a116645cb736c","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"In OpenStack ecosystems the entities rarely go alone: usually they interact"},{"line_number":438,"context_line":"with each other. Artifacts aren\u0027t different: quite often an artifact may need"},{"line_number":439,"context_line":"to work with other artifacts in one way or another."},{"line_number":440,"context_line":"In this case it may be reasonable to introduce a concept of *Artifact"},{"line_number":441,"context_line":"Dependency*: an artifact may depend on any number of other artifacts of any"},{"line_number":442,"context_line":"type."}],"source_content_type":"text/x-rst","patch_set":7,"id":"baa201ad_94d0d2f8","line":439,"in_reply_to":"baa201ad_b0db6d7c","updated":"2014-10-13 17:36:10.000000000","message":"Hmm, possibly it\u0027s ok now, since image is NOT glance artifact yet. When image becomes artifact, we are sure to need multiple artifact for a single upload/import.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"eb01f96ed3ff23ffabee08df00c78c8991169d5e","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"  ativelkov"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"Other contributors:"},{"line_number":1029,"context_line":"  gokrokve"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"Work Items"},{"line_number":1032,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9aa7fdbe_7fe729ac","line":1029,"updated":"2014-10-28 17:21:26.000000000","message":"add me and Ina in the contributors.","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"eb01f96ed3ff23ffabee08df00c78c8991169d5e","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"  4CiTfZPDn6rpRm5In7U/edit\u003e`_"},{"line_number":1085,"context_line":"- `Summit Etherpad from Artifacts\u0027 discussion session"},{"line_number":1086,"context_line":"  \u003chttp://etherpad.openstack.org/p/juno-hot-artifacts-repository-finalize-desi"},{"line_number":1087,"context_line":"  gn\u003e`_"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9aa7fdbe_bf60b101","line":1087,"updated":"2014-10-28 17:21:26.000000000","message":"and add the reference to the database model:\nhttps://dl.dropboxusercontent.com/u/13626875/bd.png","commit_id":"103b166bc5ca220dea8006831279e5701f10fe75"}],"specs/kilo/artifact-repository.rst":[{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"c9bbb7f53298edacdbd1559b945f26c109a3fbfa","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"will identify the particular type of the artifact type if there are many of"},{"line_number":1035,"context_line":"them available. If the `type_version` is omitted the most recent version of"},{"line_number":1036,"context_line":"artifact type is assumed (unless specified differently by API method\u0027s"},{"line_number":1037,"context_line":"documentation)."},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"* **List Available Artifact Types**"},{"line_number":1040,"context_line":"   * **GET /v2/artifacts/**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_140bac2a","line":1037,"updated":"2015-03-08 17:41:18.000000000","message":"I don\u0027t think having an optional component is a good idea. From the client\u0027s perspective, I would never use the \"latest version\" format that omits the version, since then I lose control over server-side changes that may happen in the future. I recommend that you require the version to always be included in the resource URL.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"28528cc324197d9ccd95db5bf461a5428aacfdc0","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"will identify the particular type of the artifact type if there are many of"},{"line_number":1035,"context_line":"them available. If the `type_version` is omitted the most recent version of"},{"line_number":1036,"context_line":"artifact type is assumed (unless specified differently by API method\u0027s"},{"line_number":1037,"context_line":"documentation)."},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"* **List Available Artifact Types**"},{"line_number":1040,"context_line":"   * **GET /v2/artifacts/**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_5fe0dd95","line":1037,"in_reply_to":"9a80dd14_140bac2a","updated":"2015-03-08 21:17:21.000000000","message":"OK, this makes sense for the artifact creation. You are right: we should always require the type version to be specified in that operation. \nBut in case of List operation it is still good to have a \"common\" endpoint which will list all the artifacts of the given type regardless of their type version. However, in this case we do not assume the latest type version, instead we assume no type-version specific at all, i.e. we do not allow to filter or sort by type-specific properties, as their set, semantics and data types may change from version to version.\nThis is actually a behaviour which is currently implemented, it is just don\u0027t reflected here.\n\nSo, what about the following: we require the type version in the artifact creation URI, but we allow to omit type version in listings, but reflect the limitations of that approach here in the spec. Does it make sense?","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"d1eb7513c5d4c15456400db752bd7dc8f63be349","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"will identify the particular type of the artifact type if there are many of"},{"line_number":1035,"context_line":"them available. If the `type_version` is omitted the most recent version of"},{"line_number":1036,"context_line":"artifact type is assumed (unless specified differently by API method\u0027s"},{"line_number":1037,"context_line":"documentation)."},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"* **List Available Artifact Types**"},{"line_number":1040,"context_line":"   * **GET /v2/artifacts/**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_ba1e475d","line":1037,"in_reply_to":"9a80dd14_5fe0dd95","updated":"2015-03-08 21:44:24.000000000","message":"How about this:\n\n/artifacts returns all the artifacts. This URL does not accept POST, PUT or DELETE requests.\n\n/artifacts/{version} returns artifacts of the given version. POST request creates an artifact of this version. PUT and DELETE edit and delete respectively.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"b75c600dc1732fb54319d25915d0b590945758d8","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"will identify the particular type of the artifact type if there are many of"},{"line_number":1035,"context_line":"them available. If the `type_version` is omitted the most recent version of"},{"line_number":1036,"context_line":"artifact type is assumed (unless specified differently by API method\u0027s"},{"line_number":1037,"context_line":"documentation)."},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"* **List Available Artifact Types**"},{"line_number":1040,"context_line":"   * **GET /v2/artifacts/**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_8d23c5bd","line":1037,"in_reply_to":"9a80dd14_7a84cf5d","updated":"2015-03-10 14:58:46.000000000","message":"Ok, after some discussions, agree to allow /artifacts/{type}/{id} (without type version) for GET requests, but require type version for PUT, PATCH, POST and DELETE: /artifacts/{type}/{version}/{id}","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1d39885e96beda1867f147613e75fc1385d79fb8","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"will identify the particular type of the artifact type if there are many of"},{"line_number":1035,"context_line":"them available. If the `type_version` is omitted the most recent version of"},{"line_number":1036,"context_line":"artifact type is assumed (unless specified differently by API method\u0027s"},{"line_number":1037,"context_line":"documentation)."},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"* **List Available Artifact Types**"},{"line_number":1040,"context_line":"   * **GET /v2/artifacts/**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_7a84cf5d","line":1037,"in_reply_to":"9a80dd14_ba1e475d","updated":"2015-03-08 22:12:28.000000000","message":"You probably mean not /artifacts, but /artifacts/{type} - right? The type still has to be specified (we have plans for having the most generic endpoint to display all the artifacts regardless of their type, but that\u0027s only an administrative stuff and is of low priority, will probably add it in the next cycle).\n\nPUT and DELETE require an artifact ID, as their always edit/delete specific artifact and not the collection. So, they do not need the version, as the specific artifact always has its version assigned. So, these are \nPUT /artifacts/{type}/{id} and DELETE /artifacts/{type}/{id}\n\nDo you think we need to change them to \n/artifacts/{type}/{version}/{id} ?\nIt seems a bit redundant to me, as specifying an id always implies some version","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1d1448f792742a347c68c4d727468a493a87395f","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        The set of parameters and their values should be compliant to the"},{"line_number":1080,"context_line":"        schema defined by the artifact type and its version."},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"        **Filtering**:"},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        * Direct comparison filtering is available for all the text- and"},{"line_number":1085,"context_line":"          numeric-valued type specific metadata fields as well as for following"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_5a18eb74","line":1082,"updated":"2015-03-08 21:45:53.000000000","message":"I think we should add more information about filters and their operations like GT, LE, etc, since it\u0027s already been implemented.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1d39885e96beda1867f147613e75fc1385d79fb8","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        The set of parameters and their values should be compliant to the"},{"line_number":1080,"context_line":"        schema defined by the artifact type and its version."},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"        **Filtering**:"},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        * Direct comparison filtering is available for all the text- and"},{"line_number":1085,"context_line":"          numeric-valued type specific metadata fields as well as for following"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_9a898377","line":1082,"in_reply_to":"9a80dd14_5a18eb74","updated":"2015-03-08 22:12:28.000000000","message":"Agree. Could you please do that?","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"0f3f55357d8a472a1abe9ec8d1735539b45e6e03","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        The set of parameters and their values should be compliant to the"},{"line_number":1080,"context_line":"        schema defined by the artifact type and its version."},{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"        **Filtering**:"},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"        * Direct comparison filtering is available for all the text- and"},{"line_number":1085,"context_line":"          numeric-valued type specific metadata fields as well as for following"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_fafa7fbb","line":1082,"in_reply_to":"9a80dd14_9a898377","updated":"2015-03-08 22:30:26.000000000","message":"Sure! And the other stuff with limit and sorting, too.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"c9bbb7f53298edacdbd1559b945f26c109a3fbfa","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"          Set comparison requires a property name to be specified as query"},{"line_number":1114,"context_line":"          parameter. The property may be repeated several times, e.g. the query"},{"line_number":1115,"context_line":"          `?tags\u003dabc\u0026tags\u003dcde\u0026tags\u003dqwerty` will filter artifacts having either"},{"line_number":1116,"context_line":"          \u0027abc, \u0027cde\u0027 or \u0027qwerty\u0027 tags associated."},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"        **Sorting**"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_14248cc3","line":1116,"updated":"2015-03-08 17:41:18.000000000","message":"Why not have a single endpoint for listing? The \"active\", \"creating\" and \"deactivated\" lists can be obtained through filtering on the \"state\" member.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"28528cc324197d9ccd95db5bf461a5428aacfdc0","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"          Set comparison requires a property name to be specified as query"},{"line_number":1114,"context_line":"          parameter. The property may be repeated several times, e.g. the query"},{"line_number":1115,"context_line":"          `?tags\u003dabc\u0026tags\u003dcde\u0026tags\u003dqwerty` will filter artifacts having either"},{"line_number":1116,"context_line":"          \u0027abc, \u0027cde\u0027 or \u0027qwerty\u0027 tags associated."},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"        **Sorting**"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_3ffa4943","line":1116,"in_reply_to":"9a80dd14_14248cc3","updated":"2015-03-08 21:17:21.000000000","message":"This separation was an idea and a requirement of Mark Washenberger, Glance PTL at the moment of initial design of this feature.\nAs far as I remember, the reason for that is that endpoints with different purposes have different defaults for filters and some operations (e.g. \"creating\" collections enforce owner\u003dcontext.current_tenant filtering rule and ignores is_public setting and other sharing rules). If we do this requests via the filtering on state field this will mean that the defaults on some filter values depend on another filter value, which is dirty and hard to maintain.\nAs far as I understand Markwash had some real problems trying to design this properly in v2 Images API and so he asked us not to have a single endpoint but instead separate these calls into 3 distinct ones. So, this design was proposed and approved on Atlanta design summit and further reviewed on Icehouse mid-cycle meetup.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"d1eb7513c5d4c15456400db752bd7dc8f63be349","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"          Set comparison requires a property name to be specified as query"},{"line_number":1114,"context_line":"          parameter. The property may be repeated several times, e.g. the query"},{"line_number":1115,"context_line":"          `?tags\u003dabc\u0026tags\u003dcde\u0026tags\u003dqwerty` will filter artifacts having either"},{"line_number":1116,"context_line":"          \u0027abc, \u0027cde\u0027 or \u0027qwerty\u0027 tags associated."},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"        **Sorting**"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_da0cdb3d","line":1116,"in_reply_to":"9a80dd14_3ffa4943","updated":"2015-03-08 21:44:24.000000000","message":"Well, okay. I don\u0027t have any of that background, but looking at this from an API design point of view it looks odd. I think it would be a bit more reasonable if the top level artifacts URL returned the entire list, and then you add three other URLs to get creating, active or deactivated. Consider that if you send a POST request to /artifacts and then send a GET request to the same URL you won\u0027t see the new artifact, since it starts in CREATING state. For consistency I think /artifacts should be generic.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"b75c600dc1732fb54319d25915d0b590945758d8","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"          Set comparison requires a property name to be specified as query"},{"line_number":1114,"context_line":"          parameter. The property may be repeated several times, e.g. the query"},{"line_number":1115,"context_line":"          `?tags\u003dabc\u0026tags\u003dcde\u0026tags\u003dqwerty` will filter artifacts having either"},{"line_number":1116,"context_line":"          \u0027abc, \u0027cde\u0027 or \u0027qwerty\u0027 tags associated."},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"        **Sorting**"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_adab291d","line":1116,"in_reply_to":"9a80dd14_7aebef12","updated":"2015-03-10 14:58:46.000000000","message":"Updated this part","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"1d39885e96beda1867f147613e75fc1385d79fb8","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"          Set comparison requires a property name to be specified as query"},{"line_number":1114,"context_line":"          parameter. The property may be repeated several times, e.g. the query"},{"line_number":1115,"context_line":"          `?tags\u003dabc\u0026tags\u003dcde\u0026tags\u003dqwerty` will filter artifacts having either"},{"line_number":1116,"context_line":"          \u0027abc, \u0027cde\u0027 or \u0027qwerty\u0027 tags associated."},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"        **Sorting**"},{"line_number":1119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_7aebef12","line":1116,"in_reply_to":"9a80dd14_da0cdb3d","updated":"2015-03-08 22:12:28.000000000","message":"Ah, there is a problem in the spec, I didn\u0027t notice it: creation of a new artifact is currently not at POST /artifacts/{type}/{version} - it is a POST /artifacts/{type}/{version}/creating, so the call is consistent (i.e. you POST to ../creating and then you GET from ../creating). \n\nThe ability to POST to /artifacts/{type}/{version} (without the ..creating suffix, i.e. to the collection of \"active\" artifacts) is reserved for future when we add \"import\" operation which allows to create ready-to-use artifacts in a single call.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"c9bbb7f53298edacdbd1559b945f26c109a3fbfa","unresolved":false,"context_lines":[{"line_number":1127,"context_line":"        descending sorting order accordingly."},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        Default value for `sort_dir` is \u0027Version\u0027, default value for"},{"line_number":1130,"context_line":"        `sort_key` is \u0027desc\u0027."},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        **Pagination**"},{"line_number":1133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_b43900f4","line":1130,"updated":"2015-03-08 17:41:18.000000000","message":"Would you consider adopting the sorting guidelines from the API-WG here? See https://github.com/openstack/api-wg/blob/master/guidelines/pagination_filter_sort.rst#sorting.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1d1448f792742a347c68c4d727468a493a87395f","unresolved":false,"context_lines":[{"line_number":1127,"context_line":"        descending sorting order accordingly."},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        Default value for `sort_dir` is \u0027Version\u0027, default value for"},{"line_number":1130,"context_line":"        `sort_key` is \u0027desc\u0027."},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        **Pagination**"},{"line_number":1133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_ff26f1cc","line":1130,"in_reply_to":"9a80dd14_b43900f4","updated":"2015-03-08 21:45:53.000000000","message":"Hi, Miguel. The new sorting syntax has been added in one of the latest PSs. Artifacts have full support of it now.\n\nI will reflect these changes in the specification.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"28528cc324197d9ccd95db5bf461a5428aacfdc0","unresolved":false,"context_lines":[{"line_number":1127,"context_line":"        descending sorting order accordingly."},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        Default value for `sort_dir` is \u0027Version\u0027, default value for"},{"line_number":1130,"context_line":"        `sort_key` is \u0027desc\u0027."},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        **Pagination**"},{"line_number":1133,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_5ff7fd58","line":1130,"in_reply_to":"9a80dd14_b43900f4","updated":"2015-03-08 21:17:21.000000000","message":"Yes, sure! In fact, it is implemented already, this spec is just a bit outdated in this aspect. Mike Fedosin, could you please update this part according to the actually proposed implementation?","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"1d1448f792742a347c68c4d727468a493a87395f","unresolved":false,"context_lines":[{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        **Pagination**"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        `limit` and `marker` query parameters may be used to paginate through"},{"line_number":1135,"context_line":"        the artifacts collection in the same way as it is done in the current"},{"line_number":1136,"context_line":"        version of Glance \"List Images\" API."},{"line_number":1137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_3a1b3774","line":1134,"updated":"2015-03-08 21:45:53.000000000","message":"Should we mention here that maximum limit number is 1000? It\u0027s done for security reasons to protect the system from intruders to prevent them from sending requests that can pull the entire database at a time.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"99663493ab00376085f0542e0e36fd43df275479","unresolved":false,"context_lines":[{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        **Pagination**"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        `limit` and `marker` query parameters may be used to paginate through"},{"line_number":1135,"context_line":"        the artifacts collection in the same way as it is done in the current"},{"line_number":1136,"context_line":"        version of Glance \"List Images\" API."},{"line_number":1137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_3ae5f737","line":1134,"in_reply_to":"9a80dd14_3a1b3774","updated":"2015-03-08 22:17:56.000000000","message":"If we are adding this in this cycle, then yes, definetely.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"c9bbb7f53298edacdbd1559b945f26c109a3fbfa","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"        type. If omitted the most recent available version or artifact type"},{"line_number":1154,"context_line":"        is assumed."},{"line_number":1155,"context_line":"   * HTTP Responses:"},{"line_number":1156,"context_line":"      * 200 if everything went fine"},{"line_number":1157,"context_line":"      * 404 if no Artifact Type is defined to handle specified value of"},{"line_number":1158,"context_line":"          `artifact_type` and/or `type_version`"},{"line_number":1159,"context_line":"      * 400 if an artifact of this type with the same name and version already"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_9f06d51b","line":1156,"updated":"2015-03-08 17:41:18.000000000","message":"Should return 201 if everything went fine, and include the URL of the new artifact in the Location header. See https://github.com/openstack/api-wg/blob/master/guidelines/http.rst#2xx-success-codes.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"b75c600dc1732fb54319d25915d0b590945758d8","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"        type. If omitted the most recent available version or artifact type"},{"line_number":1154,"context_line":"        is assumed."},{"line_number":1155,"context_line":"   * HTTP Responses:"},{"line_number":1156,"context_line":"      * 200 if everything went fine"},{"line_number":1157,"context_line":"      * 404 if no Artifact Type is defined to handle specified value of"},{"line_number":1158,"context_line":"          `artifact_type` and/or `type_version`"},{"line_number":1159,"context_line":"      * 400 if an artifact of this type with the same name and version already"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_cd913df3","line":1156,"in_reply_to":"9a80dd14_7f9761ec","updated":"2015-03-10 14:58:46.000000000","message":"Done","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"28528cc324197d9ccd95db5bf461a5428aacfdc0","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"        type. If omitted the most recent available version or artifact type"},{"line_number":1154,"context_line":"        is assumed."},{"line_number":1155,"context_line":"   * HTTP Responses:"},{"line_number":1156,"context_line":"      * 200 if everything went fine"},{"line_number":1157,"context_line":"      * 404 if no Artifact Type is defined to handle specified value of"},{"line_number":1158,"context_line":"          `artifact_type` and/or `type_version`"},{"line_number":1159,"context_line":"      * 400 if an artifact of this type with the same name and version already"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_7f9761ec","line":1156,"in_reply_to":"9a80dd14_9f06d51b","updated":"2015-03-08 21:17:21.000000000","message":"Sounds reasonable. Will do that, thanks.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"c9bbb7f53298edacdbd1559b945f26c109a3fbfa","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"   * Response schema: [JSON with created artifact record, TBD]"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"* **Publish an Artifact**"},{"line_number":1165,"context_line":"   * **POST /v2/artifacts/{artifact_type}/{id}/publish**"},{"line_number":1166,"context_line":"   * Publishes an artifact, i.e. moves it to ACTIVE state."},{"line_number":1167,"context_line":"   * URL parameters:"},{"line_number":1168,"context_line":"      * `artifact_type` identifier of the artifact type, should be equal to a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_1f12e556","line":1165,"updated":"2015-03-08 17:41:18.000000000","message":"I personally oppose the use of actions in URLs. Unfortunately the API-WG has not published a recommendation on this yet, but to be inline with RESTful principles this should be done by sending a PUT request to the artifact resource setting the state to ACTIVE.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"99663493ab00376085f0542e0e36fd43df275479","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"   * Response schema: [JSON with created artifact record, TBD]"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"* **Publish an Artifact**"},{"line_number":1165,"context_line":"   * **POST /v2/artifacts/{artifact_type}/{id}/publish**"},{"line_number":1166,"context_line":"   * Publishes an artifact, i.e. moves it to ACTIVE state."},{"line_number":1167,"context_line":"   * URL parameters:"},{"line_number":1168,"context_line":"      * `artifact_type` identifier of the artifact type, should be equal to a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_1ac3d389","line":1165,"in_reply_to":"9a80dd14_1a12f356","updated":"2015-03-08 22:17:56.000000000","message":"Well, as this part of API is marked as experimental anyway, we probably still have some room here: when advanced actions are implemented in the next cycle we will have more topics to discuss on actions anyway. At that time there may be some official position from API-WG, so we will have better vision.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"28528cc324197d9ccd95db5bf461a5428aacfdc0","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"   * Response schema: [JSON with created artifact record, TBD]"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"* **Publish an Artifact**"},{"line_number":1165,"context_line":"   * **POST /v2/artifacts/{artifact_type}/{id}/publish**"},{"line_number":1166,"context_line":"   * Publishes an artifact, i.e. moves it to ACTIVE state."},{"line_number":1167,"context_line":"   * URL parameters:"},{"line_number":1168,"context_line":"      * `artifact_type` identifier of the artifact type, should be equal to a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_1faf452b","line":1165,"in_reply_to":"9a80dd14_1f12e556","updated":"2015-03-08 21:17:21.000000000","message":"Well, the idea is that this action is much more then just setting the state to active.\n\nFirst of all, it does the dependency check (see below in error messages): it ensures that all the artifacts which the target artifacts depend on are already in \"active\" state, this also ensures that there are no circular dependencies. Even more, the developers of artifact types may be able to define their custom logic to be executed during this process: add additional checks, which may cancel the publishing, or execute additional actions which may do some final changes to metadata, process the binary data, emit notifications or even call the external APIs etc. This is not fully supported in the currently proposed code (we will have separate spec for that), but some work has already been done in that direction.\n\nAlso, in future we will add ability to define custom actions: additional methods where artifact type developers can put their own custom logic and trigger it with appropriate calls. \nFor example, there may be a call like this POST /v2/artifacts/someType/1234/some_custom_action which makes sense only for the given type of the artifact (and, probably, starting only from some version of that type) which does some custom action, which may include changing one or more of generic or type specific properties etc.\nSo, in this context \"publish\" may be thought of as a \"method\", which is just not type-specific but rather a generic one (but which still may be \"overridden\" in type-specific implementation.\n\nSo, if we consider publishing as a first-class action and not just a property change, then, IMHO, it should not be a PUT request to a state field.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"d1eb7513c5d4c15456400db752bd7dc8f63be349","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"   * Response schema: [JSON with created artifact record, TBD]"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"* **Publish an Artifact**"},{"line_number":1165,"context_line":"   * **POST /v2/artifacts/{artifact_type}/{id}/publish**"},{"line_number":1166,"context_line":"   * Publishes an artifact, i.e. moves it to ACTIVE state."},{"line_number":1167,"context_line":"   * URL parameters:"},{"line_number":1168,"context_line":"      * `artifact_type` identifier of the artifact type, should be equal to a"}],"source_content_type":"text/x-rst","patch_set":14,"id":"9a80dd14_1a12f356","line":1165,"in_reply_to":"9a80dd14_1faf452b","updated":"2015-03-08 21:44:24.000000000","message":"It\u0027s really difficult to discuss this. As I said I have an opinion on the matter of actions in REST APIs, but as a group the API-WG does not have an official position yet.","commit_id":"4c3c3221fcad1d3c22c061df3cda962964c70d2e"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"8a9943cb85fa66840ee4cbc0a9984f0ce924d0a6","unresolved":false,"context_lines":[{"line_number":301,"context_line":"  * *Numeric* - same as Integer, but stored as Numeric"},{"line_number":302,"context_line":"  * *Boolean** - boolean values, having either \u0027True\u0027 or \u0027False\u0027 as the value."},{"line_number":303,"context_line":"    In listing queries may use this field to filter artifacts by value equality."},{"line_number":304,"context_line":"  * *Text* - Long text field. May not be used for filtering, just stores"},{"line_number":305,"context_line":"    arbitrary large text descriptions, JSONs etc."},{"line_number":306,"context_line":"  * *Array* - a list of values of some specific type (String, Text, Integer,"},{"line_number":307,"context_line":"    Numeric, Boolean) or their combination."}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a80dd14_2caf1b2d","line":304,"updated":"2015-03-11 05:12:11.000000000","message":"I think we should limit the Text field to system defined to avoid that DB getting hammered by large chunks of data. Or may be we can add some small validation to ensure that this cannot be manipulated.","commit_id":"ffec872bbd7beaff9a654a66ee9d81127f263fca"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"ae9f8e9c2c7373452ac7e3b3194d32dde7fda193","unresolved":false,"context_lines":[{"line_number":301,"context_line":"  * *Numeric* - same as Integer, but stored as Numeric"},{"line_number":302,"context_line":"  * *Boolean** - boolean values, having either \u0027True\u0027 or \u0027False\u0027 as the value."},{"line_number":303,"context_line":"    In listing queries may use this field to filter artifacts by value equality."},{"line_number":304,"context_line":"  * *Text* - Long text field. May not be used for filtering, just stores"},{"line_number":305,"context_line":"    arbitrary large text descriptions, JSONs etc."},{"line_number":306,"context_line":"  * *Array* - a list of values of some specific type (String, Text, Integer,"},{"line_number":307,"context_line":"    Numeric, Boolean) or their combination."}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a80dd14_d1dc4b49","line":304,"in_reply_to":"9a80dd14_2caf1b2d","updated":"2015-03-11 11:26:27.000000000","message":"The Text was requested by actual consumers, such as Heat and Murano, as storing reasonably small texts as DB fields is faster then storing them in backend store.\nI agree that we should not put arbitrary data there (so, generic \"Description\" above probably should not be text, but rather a 255-chars string), so having a limit (definable by the plugin developer) is a good idea: we do have such limits for String fields (or it is 255 chars if not defined), we may add the same for Text. \nWill put this to notes of Declarative framework commit.\n\nTo prevent extra DB burden in may make sense to add deferred loading, so this fields are not read while listing the database but rather are loaded only on request. Does this make sense?","commit_id":"ffec872bbd7beaff9a654a66ee9d81127f263fca"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"8a9943cb85fa66840ee4cbc0a9984f0ce924d0a6","unresolved":false,"context_lines":[{"line_number":604,"context_line":"  * Delete all the binary data objects of the artifact from the underlying"},{"line_number":605,"context_line":"    storage system."},{"line_number":606,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":607,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":608,"context_line":""},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a80dd14_b7fef403","line":607,"updated":"2015-03-11 05:12:11.000000000","message":"Are we going to impl sharing/membership logic now or follow it in a separate BP?\n\nWe should add info about member calls or if it\u0027s coming later then remove the last line about membership above. And maybe add a note about the membership logic missing in initial spec somewhere in this spec.","commit_id":"ffec872bbd7beaff9a654a66ee9d81127f263fca"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"ae9f8e9c2c7373452ac7e3b3194d32dde7fda193","unresolved":false,"context_lines":[{"line_number":604,"context_line":"  * Delete all the binary data objects of the artifact from the underlying"},{"line_number":605,"context_line":"    storage system."},{"line_number":606,"context_line":"  * Delete the artifact\u0027s record from the database, including all the custom"},{"line_number":607,"context_line":"    metadata property values, associated tags and sharing memberships."},{"line_number":608,"context_line":""},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a80dd14_91873312","line":607,"in_reply_to":"9a80dd14_b7fef403","updated":"2015-03-11 11:26:27.000000000","message":"Sharings got postponed, so will remove this from here.","commit_id":"ffec872bbd7beaff9a654a66ee9d81127f263fca"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"8a9943cb85fa66840ee4cbc0a9984f0ce924d0a6","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"Reviewers"},{"line_number":1392,"context_line":"---------"},{"line_number":1393,"context_line":""},{"line_number":1394,"context_line":"TBD (any volunteers?)"},{"line_number":1395,"context_line":""},{"line_number":1396,"context_line":""},{"line_number":1397,"context_line":"Work Items"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a80dd14_0c409755","line":1394,"updated":"2015-03-11 05:12:11.000000000","message":"Please put someone here.","commit_id":"ffec872bbd7beaff9a654a66ee9d81127f263fca"},{"author":{"_account_id":8127,"name":"Alexander Tivelkov","email":"locher@yandex.ru","username":"ativelkov"},"change_message_id":"ae9f8e9c2c7373452ac7e3b3194d32dde7fda193","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"Reviewers"},{"line_number":1392,"context_line":"---------"},{"line_number":1393,"context_line":""},{"line_number":1394,"context_line":"TBD (any volunteers?)"},{"line_number":1395,"context_line":""},{"line_number":1396,"context_line":""},{"line_number":1397,"context_line":"Work Items"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9a80dd14_f19dcf5a","line":1394,"in_reply_to":"9a80dd14_0c409755","updated":"2015-03-11 11:26:27.000000000","message":"Done","commit_id":"ffec872bbd7beaff9a654a66ee9d81127f263fca"}]}
