<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi Dave,<div><br></div><div><div>So how does a user discover what capabilities are available on particular nodes? The spec says: "<span style="color: rgb(0, 0, 0); font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">The </span><i style="color: rgb(0, 0, 0); font-family: Times; font-size: medium; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; ">capabilities</i><span style="color: rgb(0, 0, 0); font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; display: inline !important; float: none; "> list for the Node MAY not be filled in until some data has been imported into the Node." so the user has no idea which of the capabilities offered by the server may be employed on the node until they try it with putting data in? This also does not allow for the user to indicate that they do not want the capability offered until after it is applied automatically by the server. This could be wasteful CPU cycles on the server side then.</span></div></div><div><font class="Apple-style-span" face="Times"><br></font></div><div>However, we are agreeing that the VOSpace spec needs to specify a standard way for a user to be able to control the capabilities on a node. The question is whether to make this explicit with new methods: attach/detachCapability or implicit through the use of standardized parameters on a capability: (set Node urn:enableCapability=True, etc.)</div><div><br></div><div>Not certain about the metacapability capability though - I just can see the reaction that would provoke it some quarters.</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Cheers,</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Matthew</div><div><br></div><div><div><div>On Sep 16, 2014, at 5:08 AM, Dave Morris wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><br>On 2014-09-13 03:06, Mike Fitzpatrick wrote:<br><blockquote type="cite">On Fri, Sep 12, 2014 at 6:04 PM, Brian Major <<a href="mailto:majorb@nrc-cnrc.gc.ca">majorb@nrc-cnrc.gc.ca</a>> wrote:<br></blockquote><blockquote type="cite">.... This means a service can offer a<br></blockquote><blockquote type="cite">capability, but it would apply to all nodes or to none at all. If there<br></blockquote><blockquote type="cite">were "special" pre-defined nodes with a capability then the user would<br></blockquote><blockquote type="cite">still be at the mercy of whatever options the service allowed (e.g. there'd<br></blockquote><blockquote type="cite">be no way to specify a different out name/database/whatever).<br></blockquote><br>There is nothing that mandates all capabilities must be available on all the nodes.<br><br>A service is free to offer different sets of capabilities on different nodes.<br><br>Which capabilities are available on which nodes is under the control of the server, because only the server really knows where and how the data is actually stored, and as a result, which capabilities it is actually possible to provide on any given node.<br><br><blockquote type="cite">In the discussion that started all these we had three capabilities in mind:<br></blockquote><br>These use cases are exactly the kind of things we had in mind when we designed the VOSpace specification. In fact, the automatic SIA capability is explicitly mentioned as an example in the capabilities section of the VOSpace specification.<br><br><blockquote type="cite">1) an SIA service for all images put into the container<br></blockquote><br>Your service can offer a SIA service as a capability on any or all of the container nodes within your service.<br><br>If you want to be able to control or configure the SIA service from the client, you can add an 'EnableSIA' property to enable/disable your SIA service on a per node basis.<br><br>You can add this now with your own property URI<br><br> 'urn:EnableSIA' - true/false to enable the SIA service<br><br>You can also add a 'ConfigSIA' capability to enable the client to configure your SIA service on a per node bases.<br><br>You can add this now with your own capability<br><br> 'urn:ConfigSIA' - REST service to get/set the SIA service properties<br><br>This would enable a client to switch the SIA capability on and off using the 'urn:EnableSIA' property, and use the 'urn:ConfigSIA' capability to configure it.<br><br>If you want the client to be able to enable/configure the SIA capability when the node is created, then map some/all of the SIA configuration properties onto node properties, which can be set when the node is created.<br><br>All of this is possible now.<br><br><blockquote type="cite">2) a service that takes any table and loads it into a database<br></blockquote><br>Again, this can be supported by defining a set of properties and capabilities for enabling and configuring the import process.<br><br>A new property to enable your TableImport capability<br><br> urn:EnableTableImport - true/false to enable the table import.<br><br>A new capability to configure your TableImport capability<br><br> urn:ConfigTableImport - A REST service to get/set the table import properties<br><br>All of this is possible now.<br><br><blockquote type="cite">3) a generic "JobRunner" capability ...<br></blockquote><br>Again, this can be supported by defining a set of properties and capabilities for enabling and configuring the executable task.<br><br>A new property to enable your JobRunner capability<br><br> urn:EnableJobRunner - true/false to enable the JobRunner capability<br><br>A new capability to configure your JobRunner capability<br><br> urn:ConfigJobRunner - A REST service to get/set the job runner properties<br><br>All of this is possible now.<br><br>----<br><br>The original VOSpace specification was designed to allow individual service providers to extend the service by developing their own properties and capabilities.<br><br>Over time, new properties and capabilities that proved popular would be adopted as official IVOA properties and capabilities.<br><br>The adoption process can be as simple as publishing an IVOA note and registering the URIs in the registry.<br><br>The reason that we did not define any of these extended capabilities in the original VOSpace specification was to try to keep the core specification as simple as possible while still being able to provide support for these types of extensions.<br><br>The danger we wanted to avoid was like the Simple Object Access Protocol (SOAP), the VOSpace specification would gradually become more and more specialized until it was no longer Simple anything.<br><br><blockquote type="cite">.... As it stands there is no way<br></blockquote><blockquote type="cite">for a VOSpace to offer these in a list of supported capabilities, but<br></blockquote><blockquote type="cite">assign only one of those to a specific container, and no way for the user<br></blockquote><blockquote type="cite">to create multiple instances with slightly different parameters.<br></blockquote><br>These are both supported by the current specification.<br>(see above)<br><br><blockquote type="cite">For something like the SIA service example (one used by the spec as well)<br></blockquote><blockquote type="cite">an attachCapabilities method would need to return the service URL the<br></blockquote><blockquote type="cite">client could then use. Similarly one can imagine wanting to set parameters<br></blockquote><blockquote type="cite">such as one to force a scan of the current container holdings when building<br></blockquote><blockquote type="cite">the service (e.g. when you attach the capability to an existing container)<br></blockquote><blockquote type="cite">or to use only new images, to pass in DB login params, etc. You could<br></blockquote><blockquote type="cite">argue these parameters are properties of the node and that setNode would<br></blockquote><blockquote type="cite">suffice, but there should probably be a fixed syntax (e.g.<br></blockquote><blockquote type="cite">"<capName>.<param>") defined for this.<br></blockquote><blockquote type="cite">The idea of a detachCapability is needed in workflows where you might want<br></blockquote><blockquote type="cite">to suspend the capability for some reason.<br></blockquote><br>All of this is supported by the current specification.<br><br>All of this can be done now by defining a small set of properties and capabilities for each new use case, AutoSIA, TableImport, JobRunner etc.<br><br>Adding generic 'attachCapability' and 'detachCapability' methods to the core VOSpace service could involve a lot of work to describe all the metadata needed to describe which capabilities are applicable which nodes.<br><br>However .. there is nothing preventing you from adding a new 'ConfigureCapabilities' capability and making it available on any/all of the nodes in your service.<br><br>The new 'ConfigureCapabilities' capability could provide the 'attachCapability' and 'detachCapability' methods.<br><br>If the 'ConfigureCapabilities' capability proves to be popular, then it can be adopted as an official IVOA capability.<br><br>All that would needed for it to become an official IVOA capability would be an IVOA note describing the capability, and a URI registered in the registry.<br><br>All of this is supported by the current specification.<br><br>--------<br><br>Hope this helps,<br>Dave<br><br>--------<br>Dave Morris<br>Software Developer<br>Wide Field Astronomy Unit<br>Institute for Astronomy<br>University of Edinburgh<br>--------<br><br><br></div></blockquote></div><br></div></body></html>