func (c *reindexdpCmd) RunCommand(args []string) error { var path string switch { case len(args) == 0: cfg, err := serverconfig.Load(osutil.UserServerConfigPath()) if err != nil { return err } prefixes, ok := cfg.Obj["prefixes"].(map[string]interface{}) if !ok { return fmt.Errorf("No 'prefixes' object in low-level (or converted) config file %s", osutil.UserServerConfigPath()) } paths := []string{} for prefix, vei := range prefixes { pmap, ok := vei.(map[string]interface{}) if !ok { log.Printf("prefix %q value is a %T, not an object", prefix, vei) continue } pconf := jsonconfig.Obj(pmap) handlerType := pconf.RequiredString("handler") handlerArgs := pconf.OptionalObject("handlerArgs") // no pconf.Validate, as this is a recover tool if handlerType != "storage-diskpacked" { continue } if handlerArgs == nil { log.Printf("no handlerArgs for %q", prefix) continue } aconf := jsonconfig.Obj(handlerArgs) path = aconf.RequiredString("path") // no aconv.Validate, as this is a recover tool if path != "" { paths = append(paths, path) } } if len(paths) == 0 { return fmt.Errorf("Server config file %s doesn't specify a disk-packed storage handler.", osutil.UserServerConfigPath()) } if len(paths) > 1 { return fmt.Errorf("Ambiguity. Server config file %s d specify more than 1 disk-packed storage handler. Please specify one of: %v", osutil.UserServerConfigPath(), paths) } path = paths[0] case len(args) == 1: path = args[0] default: return errors.New("More than 1 argument not allowed") } if path == "" { return errors.New("no path is given/found") } return diskpacked.Reindex(path, c.overwrite) }
func (c *reindexdpCmd) RunCommand(args []string) error { var path string switch { case len(args) == 0: cfg, err := serverconfig.Load(osutil.UserServerConfigPath()) if err != nil { return err } prefixes := cfg.RequiredObject("prefixes") if err := cfg.Validate(); err != nil { return fmt.Errorf("configuration error in root object's keys: %v", err) } for prefix, vei := range prefixes { pmap, ok := vei.(map[string]interface{}) if !ok { log.Printf("prefix %q value is a %T, not an object", prefix, vei) continue } pconf := jsonconfig.Obj(pmap) handlerType := pconf.RequiredString("handler") handlerArgs := pconf.OptionalObject("handlerArgs") // no pconf.Validate, as this is a recover tool if handlerType != "storage-diskpacked" { continue } if handlerArgs == nil { log.Printf("no handlerArgs for %q", prefix) continue } aconf := jsonconfig.Obj(handlerArgs) path = aconf.RequiredString("path") // no aconv.Validate, as this is a recover tool if path != "" { break } } case len(args) == 1: path = args[0] default: return errors.New("More than 1 argument not allowed") } if path == "" { return errors.New("no path is given/found") } return diskpacked.Reindex(path, c.overwrite) }
func (c *reindexdpCmd) RunCommand(args []string) error { var path string var indexConf jsonconfig.Obj switch len(args) { case 0: case 1: path = args[0] default: return errors.New("More than 1 argument not allowed") } cfg, err := serverinit.LoadFile(osutil.UserServerConfigPath()) if err != nil { return err } prefixes, ok := cfg.Obj["prefixes"].(map[string]interface{}) if !ok { return fmt.Errorf("No 'prefixes' object in low-level (or converted) config file %s", osutil.UserServerConfigPath()) } paths, confs := []string{}, []jsonconfig.Obj{} for prefix, vei := range prefixes { pmap, ok := vei.(map[string]interface{}) if !ok { log.Printf("prefix %q value is a %T, not an object", prefix, vei) continue } pconf := jsonconfig.Obj(pmap) handlerType := pconf.RequiredString("handler") handlerArgs := pconf.OptionalObject("handlerArgs") // no pconf.Validate, as this is a recover tool if handlerType != "storage-diskpacked" { continue } log.Printf("handlerArgs of %q: %v", prefix, handlerArgs) if handlerArgs == nil { log.Printf("no handlerArgs for %q", prefix) continue } aconf := jsonconfig.Obj(handlerArgs) apath := aconf.RequiredString("path") // no aconv.Validate, as this is a recover tool if apath == "" { log.Printf("path is missing for %q", prefix) continue } if path != "" && path != apath { continue } paths = append(paths, apath) confs = append(confs, aconf) } if len(paths) == 0 { return fmt.Errorf("Server config file %s doesn't specify a disk-packed storage handler.", osutil.UserServerConfigPath()) } if len(paths) > 1 { return fmt.Errorf("Ambiguity. Server config file %s d specify more than 1 disk-packed storage handler. Please specify one of: %v", osutil.UserServerConfigPath(), paths) } path = paths[0] if path == "" { return errors.New("no path is given/found") } // If no index is specified, the default will be used (as on the regular path). if mi := confs[0]["metaIndex"]; mi != nil { if mi, ok := mi.(map[string]interface{}); ok { indexConf = jsonconfig.Obj(mi) } } log.Printf("indexConf: %v", indexConf) return diskpacked.Reindex(path, c.overwrite, indexConf) }