// DoRPC acts as a switchboard for RPC commands. func (d *Data) DoRPC(request datastore.Request, reply *datastore.Response) error { switch request.TypeCommand() { default: return fmt.Errorf("Unknown command. Data type '%s' [%s] does not support '%s' command.", d.DataName(), d.TypeName(), request.TypeCommand()) } }
// DoRPC acts as a switchboard for RPC commands. func (d *Data) DoRPC(req datastore.Request, reply *datastore.Response) error { switch req.TypeCommand() { case "load": if len(req.Command) < 5 { return fmt.Errorf("Poorly formatted load command. See command-line help.") } // Parse the request var uuidStr, dataName, cmdStr, offsetStr string filenames, err := req.FilenameArgs(1, &uuidStr, &dataName, &cmdStr, &offsetStr) if err != nil { return err } if len(filenames) == 0 { return fmt.Errorf("Need to include at least one file to add: %s", req) } // Get offset offset, err := dvid.StringToPoint(offsetStr, ",") if err != nil { return fmt.Errorf("Illegal offset specification: %s: %v", offsetStr, err) } // Get list of files to add var addedFiles string if len(filenames) == 1 { addedFiles = filenames[0] } else { addedFiles = fmt.Sprintf("filenames: %s [%d more]", filenames[0], len(filenames)-1) } dvid.Debugf(addedFiles + "\n") uuid, versionID, err := datastore.MatchingUUID(uuidStr) if err != nil { return err } if err = datastore.AddToNodeLog(uuid, []string{req.Command.String()}); err != nil { return err } if err = d.LoadImages(versionID, offset, filenames); err != nil { return err } if err := datastore.SaveDataByUUID(uuid, d); err != nil { return err } return nil case "composite": if len(req.Command) < 6 { return fmt.Errorf("Poorly formatted composite command. See command-line help.") } return d.CreateComposite(req, reply) default: return fmt.Errorf("Unknown command. Data type '%s' [%s] does not support '%s' command.", d.DataName(), d.TypeName(), req.TypeCommand()) } return nil }
// Do acts as a switchboard for RPC commands. func (d *Data) DoRPC(request datastore.Request, reply *datastore.Response) error { if request.TypeCommand() != "load" { return fmt.Errorf("Unknown command. Data type '%s' [%s] does not support '%s' command.", d.DataName(), d.TypeName(), request.TypeCommand()) } if len(request.Command) < 5 { return fmt.Errorf("Poorly formatted load command. See command-line help.") } return d.LoadLocal(request, reply) }
// DoRPC handles the 'generate' command. func (d *Data) DoRPC(request datastore.Request, reply *datastore.Response) error { if request.TypeCommand() != "generate" { return fmt.Errorf("Unknown command. Data instance '%s' [%s] does not support '%s' command.", d.DataName(), d.TypeName(), request.TypeCommand()) } var uuidStr, dataName, cmdStr string request.CommandArgs(1, &uuidStr, &dataName, &cmdStr) // Get the imagetile generation configuration from a file or stdin. var err error var tileSpec TileSpec if request.Input != nil { tileSpec, err = LoadTileSpec(request.Input) if err != nil { return err } } else { config := request.Settings() filename, found, err := config.GetString("filename") if err != nil { return err } if found { configData, err := storage.DataFromFile(filename) if err != nil { return err } tileSpec, err = LoadTileSpec(configData) if err != nil { return err } dvid.Infof("Using tile spec file: %s\n", filename) } else { dvid.Infof("Using default tile generation method since no tile spec file was given...\n") tileSpec, err = d.DefaultTileSpec(uuidStr) if err != nil { return err } } } reply.Text = fmt.Sprintf("Tiling data instance %q @ node %s...\n", dataName, uuidStr) go func() { err := d.ConstructTiles(uuidStr, tileSpec, request) if err != nil { dvid.Errorf("Cannot construct tiles for data instance %q @ node %s: %v\n", dataName, uuidStr, err) } }() return nil }
// DoRPC acts as a switchboard for RPC commands. func (d *Data) DoRPC(req datastore.Request, reply *datastore.Response) error { switch req.TypeCommand() { case "load": if len(req.Command) < 5 { return fmt.Errorf("Poorly formatted load command. See command-line help.") } // Parse the request var uuidStr, dataName, cmdStr, offsetStr string filenames, err := req.FilenameArgs(1, &uuidStr, &dataName, &cmdStr, &offsetStr) if err != nil { return err } if len(filenames) == 0 { hostname, _ := os.Hostname() return fmt.Errorf("Couldn't find any files to add. Are they visible to DVID server on %s?", hostname) } // Get offset offset, err := dvid.StringToPoint(offsetStr, ",") if err != nil { return fmt.Errorf("Illegal offset specification: %s: %v", offsetStr, err) } // Get list of files to add var addedFiles string if len(filenames) == 1 { addedFiles = filenames[0] } else { addedFiles = fmt.Sprintf("filenames: %s [%d more]", filenames[0], len(filenames)-1) } dvid.Debugf(addedFiles + "\n") uuid, versionID, err := datastore.MatchingUUID(uuidStr) if err != nil { return err } if err = datastore.AddToNodeLog(uuid, []string{req.Command.String()}); err != nil { return err } return d.LoadImages(versionID, offset, filenames) case "put": if len(req.Command) < 7 { return fmt.Errorf("Poorly formatted put command. See command-line help.") } source := req.Command[4] switch source { case "local": return d.PutLocal(req, reply) case "remote": return fmt.Errorf("put remote not yet implemented") default: return fmt.Errorf("Unknown command. Data instance '%s' [%s] does not support '%s' command.", d.DataName(), d.TypeName(), req.TypeCommand()) } case "roi": if len(req.Command) < 6 { return fmt.Errorf("Poorly formatted roi command. See command-line help.") } return d.ForegroundROI(req, reply) default: return fmt.Errorf("Unknown command. Data instance '%s' [%s] does not support '%s' command.", d.DataName(), d.TypeName(), req.TypeCommand()) } return nil }