Despite inheriting the getName method from Value (and a few similar methods), MDNodes don't actually have names.

If you have something like:

&lt;instruction&gt;, !mymetadata !5


and you want the string "!mymetadata", you need to use the "kind" value - that unsigned value in each pair - to get the custom metadata name from the module. The code would like something like (roughly, didn't check it myself):

SmallVector&lt;StringRef, 8&gt; Names;
M.getMDKindNames(Names);

for(SmallVector&lt;std::pair&lt;unsigned, MDNode*&gt;, 4&gt;::iterator
    II = MDForInst.begin(), EE = MDForInst.end(); II !=EE; ++II) {
  outs() &lt;&lt; "name: " &lt;&lt; Names[II-&gt;first] &lt;&lt; "\n";
}


Reading Metadata from Instruction
I am attempting to follow the tutorial for evaluating Myrrix for my collaborative filtering needs:
http://myrrix.com/quick-start/

On my Windows 7 laptop, I am able to get the stand-alone java binary running. I can load the web interface on port 80. However, when I go to ingest the sample audioscrobber data I get the message:

Error 500 : /ingest

java.io.IOException: The temporary upload location [C:\Users\XXXXXX\AppData\Local\Temp\1372181071432-0\work\Tomcat\localhost\_\tmp] is not valid
at org.apache.catalina.connector.Request.parseParts(Request.java:2698)
at org.apache.catalina.connector.Request.getParts(Request.java:2640)
at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1076)
at net.myrrix.web.servlets.IngestServlet.doPost(IngestServlet.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at net.myrrix.web.servlets.AbstractMyrrixServlet.service(AbstractMyrrixServlet.java:155)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1686)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


I was hoping that it was just a matter of adding a "--localInputDir" directive to the command line would fix things. However, this seems unrelated to where the Tomcat server is trying to upload.

How do I modify the stand-alone binary so that I am able to successfully ingest sample data for training?
