)]}'
{"etc/marconi-queues.conf-sample":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e78ffe06a751e11e4fb093a81721873c8a9c4b60","unresolved":false,"context_lines":[{"line_number":35,"context_line":"# TODO(kgriffs): Add example stages"},{"line_number":36,"context_line":"[queues:storage]"},{"line_number":37,"context_line":"# Pipeline for operations on queue resources"},{"line_number":38,"context_line":";queue_pipeline \u003d []"},{"line_number":39,"context_line":"# Pipeline for operations on message resources"},{"line_number":40,"context_line":";message_pipeline \u003d []"},{"line_number":41,"context_line":"# Pipeline for operations on claim resources"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAATH%2F%2FqKc%3D","line":38,"updated":"2013-10-11 16:20:15.000000000","message":"These options are lists of comma separated strings.","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"},{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"e11670e168bce0e1ea695cd215da6b9c0b33372b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"# TODO(kgriffs): Add example stages"},{"line_number":36,"context_line":"[queues:storage]"},{"line_number":37,"context_line":"# Pipeline for operations on queue resources"},{"line_number":38,"context_line":";queue_pipeline \u003d []"},{"line_number":39,"context_line":"# Pipeline for operations on message resources"},{"line_number":40,"context_line":";message_pipeline \u003d []"},{"line_number":41,"context_line":"# Pipeline for operations on claim resources"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAATH%2F%2FiVw%3D","line":38,"in_reply_to":"AAAATH%2F%2FqKc%3D","updated":"2013-10-14 21:02:43.000000000","message":"Yeah, found that; silly typo!","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"}],"marconi/common/pipeline.py":[{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"e11670e168bce0e1ea695cd215da6b9c0b33372b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def _get_storage_pipeline(resource_name, conf):"},{"line_number":71,"context_line":"    \"\"\"Constructs and returns a storage resource pipeline."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    This is a helper function for any service supporting"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FiVY%3D","line":70,"updated":"2013-10-14 21:02:43.000000000","message":"Not a bad idea for a future patch. BTW, I removed those helpers since they ended up not being useful.","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e78ffe06a751e11e4fb093a81721873c8a9c4b60","unresolved":false,"context_lines":[{"line_number":67,"context_line":"]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def _get_storage_pipeline(resource_name, conf):"},{"line_number":71,"context_line":"    \"\"\"Constructs and returns a storage resource pipeline."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    This is a helper function for any service supporting"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FqGA%3D","line":70,"updated":"2013-10-11 16:20:15.000000000","message":"We could also rename this to `get_pipeline_for` and re-use this function to get \u0027configurable\u0027 pipelines not just for storage controllers. If so, we\u0027ll call this function directly from wherever the pipeline is needed instead of having several get_{0}_pipeline functions.","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e78ffe06a751e11e4fb093a81721873c8a9c4b60","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    :rtype: `Pipeline`"},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":"    conf.register_opts(_PIPELINE_CONFIGS,"},{"line_number":85,"context_line":"                       group\u003d\u0027storage\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    pipeline \u003d []"},{"line_number":88,"context_line":"    for ns in conf.storage[resource_name + \u0027_pipeline\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FqHo%3D","line":85,"updated":"2013-10-11 16:20:15.000000000","message":"You used \u0027queues:storage\u0027 in the conf sample, I guess this should be changed as well. \n\nI didn\u0027t use queue: because we\u0027ll get rid of those prefixes since we\u0027ve split config files for the proxy and queues and because this code could be used by the proxy as well.","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"},{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"e11670e168bce0e1ea695cd215da6b9c0b33372b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    :rtype: `Pipeline`"},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":"    conf.register_opts(_PIPELINE_CONFIGS,"},{"line_number":85,"context_line":"                       group\u003d\u0027storage\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    pipeline \u003d []"},{"line_number":88,"context_line":"    for ns in conf.storage[resource_name + \u0027_pipeline\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FiR0%3D","line":85,"in_reply_to":"AAAATH%2F%2FqHo%3D","updated":"2013-10-14 21:02:43.000000000","message":"Good catch. Let me fix that.","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e78ffe06a751e11e4fb093a81721873c8a9c4b60","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    return Pipeline(pipeline)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def __emit(namespace):"},{"line_number":102,"context_line":"    for resource in _PIPELINE_RESOURCES:"},{"line_number":103,"context_line":"        function_name \u003d \u0027get_{0}_pipeline\u0027.format(resource)"},{"line_number":104,"context_line":"        namespace[function_name] \u003d functools.partial(_get_storage_pipeline,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FqIU%3D","line":101,"updated":"2013-10-11 16:20:15.000000000","message":"What about:\n\n    get_queue_pipeline \u003d functools.partial(_get_pipeline, \u0027queue\u0027)\n    get_message_pipeline \u003d ....\n\nfor the sake of readability. Not big deal, though.","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"},{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"e11670e168bce0e1ea695cd215da6b9c0b33372b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    return Pipeline(pipeline)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def __emit(namespace):"},{"line_number":102,"context_line":"    for resource in _PIPELINE_RESOURCES:"},{"line_number":103,"context_line":"        function_name \u003d \u0027get_{0}_pipeline\u0027.format(resource)"},{"line_number":104,"context_line":"        namespace[function_name] \u003d functools.partial(_get_storage_pipeline,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FiTY%3D","line":101,"in_reply_to":"AAAATH%2F%2FqIU%3D","updated":"2013-10-14 21:02:43.000000000","message":"I ended up removing this block of code anyway...","commit_id":"5c760dea4d2741c32f1aecb184811fcf5f35781f"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"0007bcea9439069fac0778b27eb6e3d00a936dd0","unresolved":false,"context_lines":[{"line_number":18,"context_line":"The pipeline can be used to enhance the storage layer with filtering, routing,"},{"line_number":19,"context_line":"multiplexing and the like. For example:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \u003e\u003e\u003e stages \u003d [MessageFilter(), EncryptionFilter(), QueueController()]"},{"line_number":22,"context_line":"    \u003e\u003e\u003e pipeline \u003d Pipeline(stages)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Every stage has to implement the method it wants to hook into. This method"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FfDQ%3D","line":21,"updated":"2013-10-15 15:37:44.000000000","message":"Good choice of terminology - I like stages over pipes. :)","commit_id":"bae5bf1f23682e82a5f2ff4cccb2a7cdbe558640"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"85dd34c09e88ce6424fe456e30e48747c5b3d310","unresolved":false,"context_lines":[{"line_number":18,"context_line":"The pipeline can be used to enhance the storage layer with filtering, routing,"},{"line_number":19,"context_line":"multiplexing and the like. For example:"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \u003e\u003e\u003e stages \u003d [MessageFilter(), EncryptionFilter(), QueueController()]"},{"line_number":22,"context_line":"    \u003e\u003e\u003e pipeline \u003d Pipeline(stages)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Every stage has to implement the method it wants to hook into. This method"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2Fbkw%3D","line":21,"updated":"2013-10-16 09:28:49.000000000","message":"thanks for pipe-\u003estage","commit_id":"e8cedadbfd53e889f650be4a931e87d751226b9b"}],"marconi/queues/storage/pipeline.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"8d447ac1776568dc202efe528f3aa7f4549b93a4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_PIPELINE_GROUP \u003d \u0027storage\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def _get_storage_pipeline(resource_name, conf):"},{"line_number":43,"context_line":"    \"\"\"Constructs and returns a storage resource pipeline."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    This is a helper function for any service supporting"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2Ff54%3D","line":42,"updated":"2013-10-15 12:14:57.000000000","message":"This used to be here and was then moved to common/pipeline.py because it could be useful for the proxy as well. What do you think?","commit_id":"bae5bf1f23682e82a5f2ff4cccb2a7cdbe558640"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"0007bcea9439069fac0778b27eb6e3d00a936dd0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_PIPELINE_GROUP \u003d \u0027storage\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def _get_storage_pipeline(resource_name, conf):"},{"line_number":43,"context_line":"    \"\"\"Constructs and returns a storage resource pipeline."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    This is a helper function for any service supporting"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FfAs%3D","line":42,"in_reply_to":"AAAATH%2F%2Ff54%3D","updated":"2013-10-15 15:37:44.000000000","message":"I agree, Flavio. I think this storage pipeline concept could be generally applicable.\n\nHowever, I\u0027d like to come back to moving this at a later time.","commit_id":"bae5bf1f23682e82a5f2ff4cccb2a7cdbe558640"},{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"d3a0ec0bddd2aebf4896387e50516f534f2796e3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_PIPELINE_GROUP \u003d \u0027storage\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def _get_storage_pipeline(resource_name, conf):"},{"line_number":43,"context_line":"    \"\"\"Constructs and returns a storage resource pipeline."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    This is a helper function for any service supporting"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2Fegc%3D","line":42,"in_reply_to":"AAAATH%2F%2FfAs%3D","updated":"2013-10-15 17:51:41.000000000","message":"I\u0027d like to leave it here for now. I\u0027m not sure that we still need the proxy at this point; the sharding should enable some serious scaling. If we ever do end up wanting to revisit the proxy, I suspect it will be a while down the road.","commit_id":"bae5bf1f23682e82a5f2ff4cccb2a7cdbe558640"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"0007bcea9439069fac0778b27eb6e3d00a936dd0","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    config option."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    Stages in the pipeline implement controller methods"},{"line_number":51,"context_line":"    that they want to hook. A stage can hault the"},{"line_number":52,"context_line":"    pipeline immediate by returning a value that is"},{"line_number":53,"context_line":"    not None; otherwise, processing will continue"},{"line_number":54,"context_line":"    to the next stage, ending with the actual storage"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FfBw%3D","line":51,"updated":"2013-10-15 15:37:44.000000000","message":"hault -\u003e halt","commit_id":"bae5bf1f23682e82a5f2ff4cccb2a7cdbe558640"},{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"d3a0ec0bddd2aebf4896387e50516f534f2796e3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    config option."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    Stages in the pipeline implement controller methods"},{"line_number":51,"context_line":"    that they want to hook. A stage can hault the"},{"line_number":52,"context_line":"    pipeline immediate by returning a value that is"},{"line_number":53,"context_line":"    not None; otherwise, processing will continue"},{"line_number":54,"context_line":"    to the next stage, ending with the actual storage"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATH%2F%2FegA%3D","line":51,"in_reply_to":"AAAATH%2F%2FfBw%3D","updated":"2013-10-15 17:51:41.000000000","message":"Silly English. I wish I could claim it as my second language so I would have *some* excuse. :p\n\nDone","commit_id":"bae5bf1f23682e82a5f2ff4cccb2a7cdbe558640"}]}
