diff options
241 files changed, 2749 insertions, 14066 deletions
diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index c87e9855fe9..07361e4b2eb 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -13,3 +13,4 @@ add_custom_target(vespalog_logfmt ALL DEPENDS ${GODIR}/bin/vespa-logfmt) install(PROGRAMS ${GODIR}/bin/vespa-logfmt DESTINATION bin) install(PROGRAMS ${GODIR}/bin/vespa-deploy DESTINATION bin) +install(PROGRAMS ${GODIR}/bin/script-utils DESTINATION libexec/vespa) diff --git a/client/go/cmd/cert.go b/client/go/cmd/cert.go index ac4d5085782..3b16ec4d342 100644 --- a/client/go/cmd/cert.go +++ b/client/go/cmd/cert.go @@ -100,11 +100,15 @@ func doCert(cli *CLI, overwriteCertificate, noApplicationPackage bool, args []st return err } } - privateKeyFile, err := cli.config.privateKeyPath(app) + targetType, err := cli.config.targetType() if err != nil { return err } - certificateFile, err := cli.config.certificatePath(app) + privateKeyFile, err := cli.config.privateKeyPath(app, targetType) + if err != nil { + return err + } + certificateFile, err := cli.config.certificatePath(app, targetType) if err != nil { return err } @@ -167,7 +171,11 @@ func doCertAdd(cli *CLI, overwriteCertificate bool, args []string) error { if err != nil { return err } - certificateFile, err := cli.config.certificatePath(app) + targetType, err := cli.config.targetType() + if err != nil { + return err + } + certificateFile, err := cli.config.certificatePath(app, targetType) if err != nil { return err } diff --git a/client/go/cmd/config.go b/client/go/cmd/config.go index 8f81f8e359f..acca161727b 100644 --- a/client/go/cmd/config.go +++ b/client/go/cmd/config.go @@ -6,6 +6,7 @@ package cmd import ( "crypto/tls" + "crypto/x509" "fmt" "log" "os" @@ -298,6 +299,14 @@ func loadConfigFrom(dir string, environment map[string]string, flags map[string] return c, nil } +func athenzPath(filename string) (string, error) { + userHome, err := os.UserHomeDir() + if err != nil { + return "", err + } + return filepath.Join(userHome, ".athenz", filename), nil +} + func (c *Config) loadLocalConfigFrom(parent string) error { home := filepath.Join(parent, ".vespa") _, err := os.Stat(home) @@ -383,44 +392,69 @@ func (c *Config) deploymentIn(system vespa.System) (vespa.Deployment, error) { return vespa.Deployment{System: system, Application: app, Zone: zone}, nil } -func (c *Config) certificatePath(app vespa.ApplicationID) (string, error) { +func (c *Config) certificatePath(app vespa.ApplicationID, targetType string) (string, error) { if override, ok := c.environment["VESPA_CLI_DATA_PLANE_CERT_FILE"]; ok { return override, nil } + if targetType == vespa.TargetHosted { + return athenzPath("cert") + } return c.applicationFilePath(app, "data-plane-public-cert.pem") } -func (c *Config) privateKeyPath(app vespa.ApplicationID) (string, error) { +func (c *Config) privateKeyPath(app vespa.ApplicationID, targetType string) (string, error) { if override, ok := c.environment["VESPA_CLI_DATA_PLANE_KEY_FILE"]; ok { return override, nil } + if targetType == vespa.TargetHosted { + return athenzPath("key") + } return c.applicationFilePath(app, "data-plane-private-key.pem") } -func (c *Config) x509KeyPair(app vespa.ApplicationID) (KeyPair, error) { +func (c *Config) x509KeyPair(app vespa.ApplicationID, targetType string) (KeyPair, error) { cert, certOk := c.environment["VESPA_CLI_DATA_PLANE_CERT"] key, keyOk := c.environment["VESPA_CLI_DATA_PLANE_KEY"] + var ( + kp tls.Certificate + err error + certFile string + keyFile string + ) if certOk && keyOk { // Use key pair from environment - kp, err := tls.X509KeyPair([]byte(cert), []byte(key)) - return KeyPair{KeyPair: kp}, err - } - privateKeyFile, err := c.privateKeyPath(app) - if err != nil { - return KeyPair{}, err + kp, err = tls.X509KeyPair([]byte(cert), []byte(key)) + } else { + keyFile, err = c.privateKeyPath(app, targetType) + if err != nil { + return KeyPair{}, err + } + certFile, err = c.certificatePath(app, targetType) + if err != nil { + return KeyPair{}, err + } + kp, err = tls.LoadX509KeyPair(certFile, keyFile) } - certificateFile, err := c.certificatePath(app) if err != nil { return KeyPair{}, err } - kp, err := tls.LoadX509KeyPair(certificateFile, privateKeyFile) - if err != nil { - return KeyPair{}, err + if targetType == vespa.TargetHosted { + cert, err := x509.ParseCertificate(kp.Certificate[0]) + if err != nil { + return KeyPair{}, err + } + now := time.Now() + expiredAt := cert.NotAfter + if expiredAt.Before(now) { + delta := now.Sub(expiredAt).Truncate(time.Second) + return KeyPair{}, fmt.Errorf("certificate %s expired at %s (%s ago)", certFile, cert.NotAfter, delta) + } + return KeyPair{KeyPair: kp, CertificateFile: certFile, PrivateKeyFile: keyFile}, nil } return KeyPair{ KeyPair: kp, - CertificateFile: certificateFile, - PrivateKeyFile: privateKeyFile, + CertificateFile: certFile, + PrivateKeyFile: keyFile, }, nil } diff --git a/client/go/cmd/deploy.go b/client/go/cmd/deploy.go index 012570c5471..df08c90768b 100644 --- a/client/go/cmd/deploy.go +++ b/client/go/cmd/deploy.go @@ -78,13 +78,13 @@ $ vespa deploy -t cloud -z perf.aws-us-east-1c`, } log.Println() - if opts.IsCloud() { + if opts.Target.IsCloud() { cli.printSuccess("Triggered deployment of ", color.CyanString(pkg.Path), " with run ID ", color.CyanString(strconv.FormatInt(result.ID, 10))) } else { cli.printSuccess("Deployed ", color.CyanString(pkg.Path)) printPrepareLog(cli.Stderr, result) } - if opts.IsCloud() { + if opts.Target.IsCloud() { log.Printf("\nUse %s for deployment status, or follow this deployment at", color.CyanString("vespa status")) log.Print(color.CyanString(fmt.Sprintf("%s/tenant/%s/application/%s/%s/instance/%s/job/%s-%s/run/%d", opts.Target.Deployment().System.ConsoleURL, diff --git a/client/go/cmd/prod_test.go b/client/go/cmd/prod_test.go index 9ccc39e02a1..3c1799701a3 100644 --- a/client/go/cmd/prod_test.go +++ b/client/go/cmd/prod_test.go @@ -162,12 +162,12 @@ func TestProdSubmit(t *testing.T) { assert.Nil(t, cli.Run("auth", "cert", pkgDir)) // Remove certificate as it's not required for submission (but it must be part of the application package) - if path, err := cli.config.privateKeyPath(app); err == nil { + if path, err := cli.config.privateKeyPath(app, vespa.TargetCloud); err == nil { os.RemoveAll(path) } else { require.Nil(t, err) } - if path, err := cli.config.certificatePath(app); err == nil { + if path, err := cli.config.certificatePath(app, vespa.TargetCloud); err == nil { os.RemoveAll(path) } else { require.Nil(t, err) diff --git a/client/go/cmd/root.go b/client/go/cmd/root.go index e2f03cbc7ce..d41be3fa097 100644 --- a/client/go/cmd/root.go +++ b/client/go/cmd/root.go @@ -2,15 +2,12 @@ package cmd import ( - "crypto/tls" - "crypto/x509" "encoding/json" "fmt" "io" "log" "os" "os/exec" - "path/filepath" "strings" "time" @@ -332,7 +329,7 @@ func (c *CLI) createCloudTarget(targetType string, opts targetOptions) (vespa.Ta authConfigPath = c.config.authConfigPath() deploymentTLSOptions = vespa.TLSOptions{} if !opts.noCertificate { - kp, err := c.config.x509KeyPair(deployment.Application) + kp, err := c.config.x509KeyPair(deployment.Application, targetType) if err != nil { return nil, errHint(err, "Deployment to cloud requires a certificate. Try 'vespa auth cert'") } @@ -343,9 +340,9 @@ func (c *CLI) createCloudTarget(targetType string, opts targetOptions) (vespa.Ta } } case vespa.TargetHosted: - kp, err := athenzKeyPair() + kp, err := c.config.x509KeyPair(deployment.Application, targetType) if err != nil { - return nil, err + return nil, errHint(err, "Deployment to hosted requires an Athenz certificate", "Try renewing certificate with 'athenz-user-cert'") } apiTLSOptions = vespa.TLSOptions{ KeyPair: kp.KeyPair, @@ -406,7 +403,11 @@ func (c *CLI) service(target vespa.Target, name string, sessionOrRunID int64, cl } s, err := target.Service(name, timeout, sessionOrRunID, cluster) if err != nil { - return nil, fmt.Errorf("service '%s' is unavailable: %w", name, err) + err := fmt.Errorf("service '%s' is unavailable: %w", name, err) + if target.IsCloud() { + return nil, errHint(err, "Confirm that you're communicating with the correct zone and cluster", "The -z option controls the zone", "The -C option controls the cluster") + } + return nil, err } return s, nil } @@ -487,40 +488,6 @@ func isTerminal(w io.Writer) bool { return false } -func athenzPath(filename string) (string, error) { - userHome, err := os.UserHomeDir() - if err != nil { - return "", err - } - return filepath.Join(userHome, ".athenz", filename), nil -} - -func athenzKeyPair() (KeyPair, error) { - certFile, err := athenzPath("cert") - if err != nil { - return KeyPair{}, err - } - keyFile, err := athenzPath("key") - if err != nil { - return KeyPair{}, err - } - kp, err := tls.LoadX509KeyPair(certFile, keyFile) - if err != nil { - return KeyPair{}, err - } - cert, err := x509.ParseCertificate(kp.Certificate[0]) - if err != nil { - return KeyPair{}, err - } - now := time.Now() - expiredAt := cert.NotAfter - if expiredAt.Before(now) { - delta := now.Sub(expiredAt).Truncate(time.Second) - return KeyPair{}, errHint(fmt.Errorf("certificate %s expired at %s (%s ago)", certFile, cert.NotAfter, delta), "Try renewing certificate with 'athenz-user-cert'") - } - return KeyPair{KeyPair: kp, CertificateFile: certFile, PrivateKeyFile: keyFile}, nil -} - // applicationPackageFrom returns an application loaded from args. If args is empty, the application package is loaded // from the working directory. If requirePackaging is true, the application package is required to be packaged with mvn // package. diff --git a/client/go/cmd/status.go b/client/go/cmd/status.go index c44bbddb98a..56f394d94ee 100644 --- a/client/go/cmd/status.go +++ b/client/go/cmd/status.go @@ -74,25 +74,27 @@ func printServiceStatus(cli *CLI, name string) error { if err != nil { return err } - timeout, err := cli.config.timeout() + cluster := cli.config.cluster() + s, err := cli.service(t, name, 0, cluster) if err != nil { return err } - if timeout > 0 { - log.Printf("Waiting up to %s for service to become ready ...", color.CyanString(timeout.String())) - } - s, err := t.Service(name, timeout, 0, cli.config.cluster()) + timeout, err := cli.config.timeout() if err != nil { return err } status, err := s.Wait(timeout) + clusterPart := "" + if cluster != "" { + clusterPart = fmt.Sprintf(" named %s", color.CyanString(cluster)) + } if status/100 == 2 { - log.Print(s.Description(), " at ", color.CyanString(s.BaseURL), " is ", color.GreenString("ready")) + log.Print(s.Description(), clusterPart, " at ", color.CyanString(s.BaseURL), " is ", color.GreenString("ready")) } else { if err == nil { err = fmt.Errorf("status %d", status) } - return fmt.Errorf("%s at %s is %s: %w", s.Description(), color.CyanString(s.BaseURL), color.RedString("not ready"), err) + return fmt.Errorf("%s%s at %s is %s: %w", s.Description(), clusterPart, color.CyanString(s.BaseURL), color.RedString("not ready"), err) } return nil } diff --git a/client/go/script-utils/main.go b/client/go/script-utils/main.go new file mode 100644 index 00000000000..a7160691a5d --- /dev/null +++ b/client/go/script-utils/main.go @@ -0,0 +1,30 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Author: arnej + +package main + +import ( + "fmt" + "os" + + "github.com/vespa-engine/vespa/client/go/vespa" +) + +func main() { + if len(os.Args) < 2 { + fmt.Fprintln(os.Stderr, "actions: export-env, ipv6-only") + return + } + switch os.Args[1] { + case "export-env": + vespa.ExportDefaultEnvToSh() + case "ipv6-only": + if vespa.HasOnlyIpV6() { + os.Exit(0) + } else { + os.Exit(1) + } + default: + fmt.Fprintf(os.Stderr, "unknown action '%s'\n", os.Args[1]) + } +} diff --git a/client/go/vespa/deploy.go b/client/go/vespa/deploy.go index 0e086979d72..b98679aadd8 100644 --- a/client/go/vespa/deploy.go +++ b/client/go/vespa/deploy.go @@ -80,11 +80,6 @@ func (d DeploymentOptions) String() string { return fmt.Sprintf("%s to %s", d.Target.Deployment(), d.Target.Type()) } -// IsCloud returns whether this is a deployment to Vespa Cloud or hosted Vespa -func (d *DeploymentOptions) IsCloud() bool { - return d.Target.Type() == TargetCloud || d.Target.Type() == TargetHosted -} - func (d *DeploymentOptions) url(path string) (*url.URL, error) { service, err := d.Target.Service(DeployService, 0, 0, "") if err != nil { @@ -115,7 +110,7 @@ func ZoneFromString(s string) (ZoneID, error) { // Prepare deployment and return the session ID func Prepare(deployment DeploymentOptions) (PrepareResult, error) { - if deployment.IsCloud() { + if deployment.Target.IsCloud() { return PrepareResult{}, fmt.Errorf("prepare is not supported with %s target", deployment.Target.Type()) } sessionURL, err := deployment.url("/application/v2/tenant/default/session") @@ -164,7 +159,7 @@ func Prepare(deployment DeploymentOptions) (PrepareResult, error) { // Activate deployment with sessionID from a past prepare func Activate(sessionID int64, deployment DeploymentOptions) error { - if deployment.IsCloud() { + if deployment.Target.IsCloud() { return fmt.Errorf("activate is not supported with %s target", deployment.Target.Type()) } u, err := deployment.url(fmt.Sprintf("/application/v2/tenant/default/session/%d/active", sessionID)) @@ -186,7 +181,7 @@ func Activate(sessionID int64, deployment DeploymentOptions) error { func Deploy(opts DeploymentOptions) (PrepareResult, error) { path := "/application/v2/tenant/default/prepareandactivate" - if opts.IsCloud() { + if opts.Target.IsCloud() { if err := checkDeploymentOpts(opts); err != nil { return PrepareResult{}, err } @@ -225,7 +220,7 @@ func copyToPart(dst *multipart.Writer, src io.Reader, fieldname, filename string } func Submit(opts DeploymentOptions) error { - if !opts.IsCloud() { + if !opts.Target.IsCloud() { return fmt.Errorf("%s: submit is unsupported by %s target", opts, opts.Target.Type()) } if err := checkDeploymentOpts(opts); err != nil { @@ -282,7 +277,7 @@ func checkDeploymentOpts(opts DeploymentOptions) error { if opts.Target.Type() == TargetCloud && !opts.ApplicationPackage.HasCertificate() { return fmt.Errorf("%s: missing certificate in package", opts) } - if !opts.IsCloud() && !opts.Version.IsZero() { + if !opts.Target.IsCloud() && !opts.Version.IsZero() { return fmt.Errorf("%s: custom runtime version is not supported by %s target", opts, opts.Target.Type()) } return nil @@ -295,7 +290,7 @@ func newDeploymentRequest(url *url.URL, opts DeploymentOptions) (*http.Request, } var body io.Reader header := http.Header{} - if opts.IsCloud() { + if opts.Target.IsCloud() { var buf bytes.Buffer form := multipart.NewWriter(&buf) formFile, err := form.CreateFormFile("applicationZip", filepath.Base(opts.ApplicationPackage.Path)) diff --git a/client/go/vespa/detect_hostname.go b/client/go/vespa/detect_hostname.go new file mode 100644 index 00000000000..d4d34a5f47d --- /dev/null +++ b/client/go/vespa/detect_hostname.go @@ -0,0 +1,137 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Author: arnej + +package vespa + +import ( + "fmt" + "net" + "os" + "strings" +) + +type lookupAddrFunc func(addr string) ([]string, error) +type lookupIPFunc func(host string) ([]net.IP, error) + +// detect if this host is IPv6-only, in which case we want to pass +// the flag "-Djava.net.preferIPv6Addresses=true" to any java command +func HasOnlyIpV6() bool { + hostname, err := FindOurHostname() + if hostname == "" || err != nil { + return false + } + foundV4 := false + foundV6 := false + ipAddrs, err := net.LookupIP(hostname) + if err != nil { + return false + } + for _, addr := range ipAddrs { + switch { + case addr.IsLoopback(): + // skip + case addr.To4() != nil: + foundV4 = true + case addr.To16() != nil: + foundV6 = true + } + } + return foundV6 && !foundV4 +} + +// Find a good name for the host we're running on. +// We need something that *other* hosts can use for connnecting back +// to our services, preferably the canonical DNS name. +// If automatic detection fails, "localhost" will be returned, so +// single-node setups still have a good chance of working. +// Use the enviroment variable VESPA_HOSTNAME to override. +func FindOurHostname() (string, error) { return findOurHostname(net.LookupAddr, net.LookupIP) } + +func findOurHostname(lookupAddr lookupAddrFunc, lookupIP lookupIPFunc) (string, error) { + env := os.Getenv("VESPA_HOSTNAME") + if env != "" { + // assumes: env var is already validated and OK + return env, nil + } + name, err := os.Hostname() + if err != nil { + return findOurHostnameFrom("localhost", lookupAddr, lookupIP) + } + name, err = findOurHostnameFrom(name, lookupAddr, lookupIP) + return strings.TrimSuffix(name, "."), err +} + +func validateHostname(name string) bool { + myIpAddresses := make(map[string]bool) + interfaceAddrs, _ := net.InterfaceAddrs() + for _, ifAddr := range interfaceAddrs { + // note: ifAddr.String() is typically "127.0.0.1/8" + if ipnet, ok := ifAddr.(*net.IPNet); ok { + myIpAddresses[ipnet.IP.String()] = true + } + } + ipAddrs, _ := net.LookupIP(name) + someGood := false + for _, addr := range ipAddrs { + if len(myIpAddresses) == 0 { + // no validation possible, assume OK + return true + } + if myIpAddresses[addr.String()] { + someGood = true + } else { + return false + } + } + return someGood +} + +func findOurHostnameFrom(name string, lookupAddr lookupAddrFunc, lookupIP lookupIPFunc) (string, error) { + if strings.Contains(name, ".") && validateHostname(name) { + // it's all good + return name, nil + } + possibles := make([]string, 0, 5) + if name != "" { + ipAddrs, _ := lookupIP(name) + for _, addr := range ipAddrs { + switch { + case addr.IsLoopback(): + // skip + case addr.To4() != nil || addr.To16() != nil: + reverseNames, _ := lookupAddr(addr.String()) + possibles = append(possibles, reverseNames...) + } + } + } + interfaceAddrs, _ := net.InterfaceAddrs() + for _, ifAddr := range interfaceAddrs { + if ipnet, ok := ifAddr.(*net.IPNet); ok { + ip := ipnet.IP + if ip == nil || ip.IsLoopback() { + continue + } + reverseNames, _ := lookupAddr(ip.String()) + possibles = append(possibles, reverseNames...) + } + } + // look for valid possible starting with the given name + for _, poss := range possibles { + if strings.HasPrefix(poss, name+".") && validateHostname(poss) { + return poss, nil + } + } + // look for valid possible + for _, poss := range possibles { + if strings.Contains(poss, ".") && validateHostname(poss) { + return poss, nil + } + } + // look for any valid possible + for _, poss := range possibles { + if validateHostname(poss) { + return poss, nil + } + } + return "localhost", fmt.Errorf("fallback to localhost, os.Hostname '%s'", name) +} diff --git a/client/go/vespa/detect_hostname_test.go b/client/go/vespa/detect_hostname_test.go new file mode 100644 index 00000000000..e162bcdea8e --- /dev/null +++ b/client/go/vespa/detect_hostname_test.go @@ -0,0 +1,39 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package vespa + +import ( + "fmt" + "net" + "os" + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestDetectHostname(t *testing.T) { + lookupAddr := func(addr string) ([]string, error) { + return nil, fmt.Errorf("could not look up %s", addr) + } + lookupIP := func(host string) ([]net.IP, error) { + return nil, fmt.Errorf("no address found for %s", host) + } + + t.Setenv("VESPA_HOSTNAME", "foo.bar") + got, err := findOurHostname(lookupAddr, lookupIP) + assert.Nil(t, err) + assert.Equal(t, "foo.bar", got) + os.Unsetenv("VESPA_HOSTNAME") + got, err = findOurHostnameFrom("bar.foo.123", lookupAddr, lookupIP) + fmt.Fprintln(os.Stderr, "findOurHostname from bar.foo.123 returns:", got, "with error:", err) + assert.NotEqual(t, "", got) + parts := strings.Split(got, ".") + if len(parts) > 1 { + expanded, err2 := findOurHostnameFrom(parts[0], lookupAddr, lookupIP) + fmt.Fprintln(os.Stderr, "findOurHostname from", parts[0], "returns:", expanded, "with error:", err2) + assert.Equal(t, got, expanded) + } + got, err = findOurHostname(lookupAddr, lookupIP) + assert.NotEqual(t, "", got) + fmt.Fprintln(os.Stderr, "findOurHostname() returns:", got, "with error:", err) +} diff --git a/client/go/vespa/load_env.go b/client/go/vespa/load_env.go index a0c127ca920..8eb7c841235 100644 --- a/client/go/vespa/load_env.go +++ b/client/go/vespa/load_env.go @@ -8,11 +8,77 @@ import ( "bufio" "fmt" "os" + "os/user" "strings" ) // backwards-compatible parsing of default-env.txt func LoadDefaultEnv() error { + return loadDefaultEnvTo(new(osEnvReceiver)) +} + +// parse default-env.txt, then dump export statements for "sh" to stdout +func ExportDefaultEnvToSh() error { + holder := newShellEnvExporter() + err := loadDefaultEnvTo(holder) + holder.dump() + return err +} + +// Which user should vespa services run as? If current user is root, +// we want to change to some non-privileged user. +// Should be run after LoadDefaultEnv() which possibly loads VESPA_USER +func FindVespaUser() string { + uName := os.Getenv("VESPA_USER") + if uName != "" { + // no check here, assume valid + return uName + } + if os.Getuid() == 0 { + u, err := user.Lookup("vespa") + if err == nil { + uName = u.Username + } else { + u, err = user.Lookup("nobody") + if err == nil { + uName = u.Username + } + } + } + if uName == "" { + u, err := user.Current() + if err == nil { + uName = u.Username + } + } + if uName != "" { + os.Setenv("VESPA_USER", uName) + } + return uName +} + +type loadEnvReceiver interface { + fallbackVar(varName, varVal string) + overrideVar(varName, varVal string) + unsetVar(varName string) +} + +type osEnvReceiver struct { +} + +func (p *osEnvReceiver) fallbackVar(varName, varVal string) { + if os.Getenv(varName) == "" { + os.Setenv(varName, varVal) + } +} +func (p *osEnvReceiver) overrideVar(varName, varVal string) { + os.Setenv(varName, varVal) +} +func (p *osEnvReceiver) unsetVar(varName string) { + os.Unsetenv(varName) +} + +func loadDefaultEnvTo(r loadEnvReceiver) error { const defEnvTxt = "/conf/vespa/default-env.txt" vespaHome := FindHome() f, err := os.Open(vespaHome + defEnvTxt) @@ -42,13 +108,11 @@ func LoadDefaultEnv() error { } switch action { case "override": - os.Setenv(varName, varVal) + r.overrideVar(varName, varVal) case "fallback": - if os.Getenv(varName) == "" { - os.Setenv(varName, varVal) - } + r.fallbackVar(varName, varVal) case "unset": - os.Unsetenv(varName) + r.unsetVar(varName) default: err = fmt.Errorf("unknown action '%s'", action) } @@ -107,3 +171,93 @@ func isValidShellVariableName(s string) bool { } return len(s) > 0 } + +type shellEnvExporter struct { + exportVars map[string]string + unsetVars map[string]string +} + +func newShellEnvExporter() *shellEnvExporter { + return &shellEnvExporter{ + exportVars: make(map[string]string), + unsetVars: make(map[string]string), + } +} +func (p *shellEnvExporter) fallbackVar(varName, varVal string) { + if os.Getenv(varName) == "" || p.unsetVars[varName] != "" { + delete(p.unsetVars, varName) + p.exportVars[varName] = shellQuote(varVal) + } +} +func (p *shellEnvExporter) overrideVar(varName, varVal string) { + delete(p.unsetVars, varName) + p.exportVars[varName] = shellQuote(varVal) +} +func (p *shellEnvExporter) unsetVar(varName string) { + delete(p.exportVars, varName) + p.unsetVars[varName] = "unset" +} + +func shellQuote(s string) string { + l := 0 + nq := false + for _, ch := range s { + switch { + case (ch >= 'A' && ch <= 'Z') || + (ch >= 'a' && ch <= 'z') || + (ch >= '0' && ch <= '9'): + l++ + case ch == '_' || ch == ' ': + l++ + nq = true + case ch == '\'' || ch == '\\': + l = l + 4 + nq = true + default: + l++ + nq = true + } + } + if nq { + l = l + 2 + } + res := make([]rune, l) + i := 0 + if nq { + res[i] = '\'' + i++ + } + for _, ch := range s { + if ch == '\'' || ch == '\\' { + res[i] = '\'' + i++ + res[i] = '\\' + i++ + res[i] = ch + i++ + res[i] = '\'' + } else { + res[i] = ch + } + i++ + } + if nq { + res[i] = '\'' + i++ + } + if i != l { + err := fmt.Errorf("expected length %d but was %d", l, i) + panic(err) + } + return string(res) +} + +func (p *shellEnvExporter) dump() { + for vn, vv := range p.exportVars { + fmt.Printf("%s=%s\n", vn, vv) + fmt.Printf("export %s\n", vn) + } + for vn, _ := range p.unsetVars { + fmt.Printf("unset %s\n", vn) + } +} diff --git a/client/go/vespa/load_env_test.go b/client/go/vespa/load_env_test.go index c5b42cae161..41373f7ab82 100644 --- a/client/go/vespa/load_env_test.go +++ b/client/go/vespa/load_env_test.go @@ -2,6 +2,7 @@ package vespa import ( + "fmt" "os" "testing" @@ -15,15 +16,15 @@ func setup(t *testing.T, contents string) { envf := cdir + "/default-env.txt" err := os.MkdirAll(cdir, 0755) assert.Nil(t, err) - os.Setenv("VESPA_HOME", vdir) + t.Setenv("VESPA_HOME", vdir) err = os.WriteFile(envf, []byte(contents), 0644) assert.Nil(t, err) } func TestLoadEnvSimple(t *testing.T) { - os.Setenv("VESPA_FOO", "was foo") - os.Setenv("VESPA_BAR", "was bar") - os.Setenv("VESPA_FOOBAR", "foobar") + t.Setenv("VESPA_FOO", "was foo") + t.Setenv("VESPA_BAR", "was bar") + t.Setenv("VESPA_FOOBAR", "foobar") os.Unsetenv("VESPA_QUUX") setup(t, ` # vespa env vars file @@ -98,3 +99,59 @@ override VESPA_V2 v2 assert.NotNil(t, err) assert.Equal(t, err.Error(), "Not a valid environment variable name: '.A'") } + +func TestFindUser(t *testing.T) { + u := FindVespaUser() + if u == "" { + fmt.Fprintln(os.Stderr, "WARNING: empty result from FindVespaUser()") + } else { + fmt.Fprintln(os.Stderr, "INFO: result from FindVespaUser() is", u) + assert.Equal(t, u, os.Getenv("VESPA_USER")) + } + setup(t, ` +override VESPA_USER unprivuser +`) + LoadDefaultEnv() + u = FindVespaUser() + assert.Equal(t, "unprivuser", u) +} + +func TestExportEnv(t *testing.T) { + t.Setenv("VESPA_FOO", "was foo") + t.Setenv("VESPA_BAR", "was bar") + t.Setenv("VESPA_FOOBAR", "foobar") + t.Setenv("VESPA_BARFOO", "was barfoo") + os.Unsetenv("VESPA_QUUX") + setup(t, ` +# vespa env vars file +override VESPA_FOO "newFoo1" + +fallback VESPA_BAR "new bar" +fallback VESPA_QUUX "new quux" + +unset VESPA_FOOBAR +unset VESPA_BARFOO +fallback VESPA_BARFOO new'b<a>r'foo +override XYZ xyz +unset XYZ +`) + holder := newShellEnvExporter() + err := loadDefaultEnvTo(holder) + assert.Nil(t, err) + // new values: + assert.Equal(t, "newFoo1", holder.exportVars["VESPA_FOO"]) + assert.Equal(t, "", holder.exportVars["VESPA_BAR"]) + assert.Equal(t, "'new quux'", holder.exportVars["VESPA_QUUX"]) + assert.Equal(t, `'new'\''b<a>r'\''foo'`, holder.exportVars["VESPA_BARFOO"]) + // unsets: + assert.Equal(t, "", holder.exportVars["VESPA_FOOBAR"]) + assert.Equal(t, "unset", holder.unsetVars["VESPA_FOOBAR"]) + assert.Equal(t, "", holder.exportVars["XYZ"]) + assert.Equal(t, "unset", holder.unsetVars["XYZ"]) + // nothing extra allowed: + assert.Equal(t, 3, len(holder.exportVars)) + assert.Equal(t, 2, len(holder.unsetVars)) + // run it + err = ExportDefaultEnvToSh() + assert.Nil(t, err) +} diff --git a/client/go/vespa/target.go b/client/go/vespa/target.go index 9a2bb770906..34dda889c5a 100644 --- a/client/go/vespa/target.go +++ b/client/go/vespa/target.go @@ -52,6 +52,9 @@ type Target interface { // Type returns this target's type, e.g. local or cloud. Type() string + // IsCloud returns whether this target is Vespa Cloud or hosted Vespa + IsCloud() bool + // Deployment returns the deployment managed by this target. Deployment() Deployment diff --git a/client/go/vespa/target_cloud.go b/client/go/vespa/target_cloud.go index 1076724a252..c89e6f6ecef 100644 --- a/client/go/vespa/target_cloud.go +++ b/client/go/vespa/target_cloud.go @@ -114,6 +114,8 @@ func (t *cloudTarget) Type() string { return TargetCloud } +func (t *cloudTarget) IsCloud() bool { return true } + func (t *cloudTarget) Deployment() Deployment { return t.deploymentOptions.Deployment } func (t *cloudTarget) Service(name string, timeout time.Duration, runID int64, cluster string) (*Service, error) { @@ -384,7 +386,7 @@ func (t *cloudTarget) discoverEndpoints(timeout time.Duration) error { return err } if len(urlsByCluster) == 0 { - return fmt.Errorf("no endpoints discovered") + return fmt.Errorf("no endpoints discovered for %s", t.deploymentOptions.Deployment) } t.deploymentOptions.ClusterURLs = urlsByCluster return nil diff --git a/client/go/vespa/target_custom.go b/client/go/vespa/target_custom.go index bc25f19bf1a..c34f801641c 100644 --- a/client/go/vespa/target_custom.go +++ b/client/go/vespa/target_custom.go @@ -33,6 +33,8 @@ func CustomTarget(httpClient util.HTTPClient, baseURL string) Target { func (t *customTarget) Type() string { return t.targetType } +func (t *customTarget) IsCloud() bool { return false } + func (t *customTarget) Deployment() Deployment { return Deployment{} } func (t *customTarget) createService(name string) (*Service, error) { diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java index efc64a5aa40..9cd5d901574 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java @@ -59,7 +59,7 @@ public class SummaryClass extends Derived { /** MUST be called after all other fields are added */ private void deriveImplicitFields(DocumentSummary summary, Map<String, SummaryClassField> fields) { if (summary.getName().equals("default")) { - addField(SummaryClass.DOCUMENT_ID_FIELD, DataType.STRING, SummaryTransform.DOCUMENT_ID, fields); + addField(SummaryClass.DOCUMENT_ID_FIELD, DataType.STRING, SummaryTransform.DOCUMENT_ID, "", fields); } } @@ -68,12 +68,14 @@ public class SummaryClass extends Derived { if (!accessingDiskSummary && schema.isAccessingDiskSummary(summaryField)) { accessingDiskSummary = true; } - addField(summaryField.getName(), summaryField.getDataType(), summaryField.getTransform(), fields); + addField(summaryField.getName(), summaryField.getDataType(), summaryField.getTransform(), + SummaryMap.getSource(summaryField), fields); } } private void addField(String name, DataType type, SummaryTransform transform, + String source, Map<String, SummaryClassField> fields) { if (fields.containsKey(name)) { SummaryClassField sf = fields.get(name); @@ -82,7 +84,7 @@ public class SummaryClass extends Derived { ". " + "Declared as type " + sf.getType() + " and " + type); } } else { - fields.put(name, new SummaryClassField(name, type, transform, rawAsBase64)); + fields.put(name, new SummaryClassField(name, type, transform, source, rawAsBase64)); } } @@ -110,7 +112,9 @@ public class SummaryClass extends Derived { for (SummaryClassField field : fields.values() ) { classBuilder.fields(new SummaryConfig.Classes.Fields.Builder(). name(field.getName()). - type(field.getType().getName())); + type(field.getType().getName()). + command(field.getCommand()). + source(field.getSource())); } return classBuilder; } diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java index f042054a0b5..00972895306 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java @@ -28,8 +28,9 @@ import com.yahoo.vespa.documentmodel.SummaryTransform; public class SummaryClassField { private final String name; - private final Type type; + private final String command; + private final String source; /** The summary field type enumeration */ public enum Type { @@ -68,15 +69,21 @@ public class SummaryClassField { } } - public SummaryClassField(String name, DataType type, SummaryTransform transform, boolean rawAsBase64) { + public SummaryClassField(String name, DataType type, SummaryTransform transform, String source, boolean rawAsBase64) { this.name = name; this.type = convertDataType(type, transform, rawAsBase64); + this.command = SummaryMap.getCommand(transform); + this.source = source; } public String getName() { return name; } public Type getType() { return type; } + public String getCommand() { return command; } + + public String getSource() { return source; } + /** Converts to the right summary field type from a field datatype and a transform*/ public static Type convertDataType(DataType fieldType, SummaryTransform transform, boolean rawAsBase64) { FieldValue fval = fieldType.createFieldValue(); diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java b/config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java index 9d3d00f1481..cecf3ecdd85 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java @@ -49,31 +49,14 @@ public class SummaryMap extends Derived implements SummarymapConfig.Producer { private void derive(DocumentSummary documentSummary) { for (SummaryField summaryField : documentSummary.getSummaryFields().values()) { - if (summaryField.getTransform()== SummaryTransform.NONE) continue; - - if (summaryField.getTransform()==SummaryTransform.ATTRIBUTE || - (summaryField.getTransform()==SummaryTransform.ATTRIBUTECOMBINER && summaryField.hasExplicitSingleSource()) || - summaryField.getTransform()==SummaryTransform.COPY || - summaryField.getTransform()==SummaryTransform.DISTANCE || - summaryField.getTransform()==SummaryTransform.GEOPOS || - summaryField.getTransform()==SummaryTransform.POSITIONS || - summaryField.getTransform()==SummaryTransform.MATCHED_ELEMENTS_FILTER || - summaryField.getTransform()==SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER) - { - resultTransforms.put(summaryField.getName(), new FieldResultTransform(summaryField.getName(), - summaryField.getTransform(), - summaryField.getSingleSource())); - } else { - // Note: Currently source mapping is handled in the indexing statement, - // by creating a summary field for each of the values - // This works, but is suboptimal. We could consolidate to a minimal set and - // use the right value from the minimal set as the third parameter here, - // and add "override" commands to multiple static values - boolean useFieldNameAsArgument = summaryField.getTransform().isDynamic(); - resultTransforms.put(summaryField.getName(), new FieldResultTransform(summaryField.getName(), - summaryField.getTransform(), - useFieldNameAsArgument ? summaryField.getName() : "")); + if (summaryField.getTransform()== SummaryTransform.NONE) { + continue; } + + resultTransforms.put(summaryField.getName(), + new FieldResultTransform(summaryField.getName(), + summaryField.getTransform(), + getSource(summaryField))); } } @@ -85,13 +68,42 @@ public class SummaryMap extends Derived implements SummarymapConfig.Producer { protected String getDerivedName() { return "summarymap"; } /** Returns the command name of a transform */ - private String getCommand(SummaryTransform transform) { - if (transform == SummaryTransform.DISTANCE) + static String getCommand(SummaryTransform transform) { + if (transform == SummaryTransform.NONE) { + return ""; + } else if (transform == SummaryTransform.DISTANCE) { return "absdist"; - else if (transform.isDynamic()) + } else if (transform.isDynamic()) { return "dynamicteaser"; - else + } else { return transform.getName(); + } + } + + static String getSource(SummaryField summaryField) { + if (summaryField.getTransform() == SummaryTransform.NONE) { + return ""; + } + + if (summaryField.getTransform() == SummaryTransform.ATTRIBUTE || + (summaryField.getTransform() == SummaryTransform.ATTRIBUTECOMBINER && summaryField.hasExplicitSingleSource()) || + summaryField.getTransform() == SummaryTransform.COPY || + summaryField.getTransform() == SummaryTransform.DISTANCE || + summaryField.getTransform() == SummaryTransform.GEOPOS || + summaryField.getTransform() == SummaryTransform.POSITIONS || + summaryField.getTransform() == SummaryTransform.MATCHED_ELEMENTS_FILTER || + summaryField.getTransform() == SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER) + { + return summaryField.getSingleSource(); + } else { + // Note: Currently source mapping is handled in the indexing statement, + // by creating a summary field for each of the values + // This works, but is suboptimal. We could consolidate to a minimal set and + // use the right value from the minimal set as the third parameter here, + // and add "override" commands to multiple static values + boolean useFieldNameAsArgument = summaryField.getTransform().isDynamic(); + return useFieldNameAsArgument ? summaryField.getName() : ""; + } } /** @@ -100,7 +112,7 @@ public class SummaryMap extends Derived implements SummarymapConfig.Producer { * A dynamic transform needs the query to perform its computations. */ // TODO/Note: "dynamic" here means something else than in SummaryTransform - public static boolean isDynamicCommand(String commandName) { + static boolean isDynamicCommand(String commandName) { return (commandName.equals("dynamicteaser") || commandName.equals(SummaryTransform.MATCHED_ELEMENTS_FILTER.getName()) || commandName.equals(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER.getName())); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java index bbccdaa9453..98b8574a015 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java @@ -81,6 +81,9 @@ public class ConfigserverCluster extends AbstractConfigProducer if (options.zookeeperClientPort().isPresent()) { builder.clientPort(options.zookeeperClientPort().get()); } + if (options.hostedVespa().orElse(false)) { + builder.vespaTlsConfigFile(Defaults.getDefaults().underVespaHome("conf/zookeeper/tls.conf.json")); + } } @Override diff --git a/config-model/src/test/derived/advanced/summary.cfg b/config-model/src/test/derived/advanced/summary.cfg index 18d67a9ea84..11a73d6a90c 100644 --- a/config-model/src/test/derived/advanced/summary.cfg +++ b/config-model/src/test/derived/advanced/summary.cfg @@ -5,28 +5,52 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "debug" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "attributes" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "title_s" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "product" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "product3" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "mysummary" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 472092010 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "location_zcurve" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "location_zcurve" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/array_of_struct_attribute/summary.cfg b/config-model/src/test/derived/array_of_struct_attribute/summary.cfg index 38298feaa0c..e62a8a5c39c 100644 --- a/config-model/src/test/derived/array_of_struct_attribute/summary.cfg +++ b/config-model/src/test/derived/array_of_struct_attribute/summary.cfg @@ -5,18 +5,32 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "elem_array" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 659145226 classes[].name "rename" classes[].omitsummaryfeatures false classes[].fields[].name "new_elem_array" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "elem_array" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/attributeprefetch/summary.cfg b/config-model/src/test/derived/attributeprefetch/summary.cfg index 7fabb674ebd..e2ed135c3a2 100644 --- a/config-model/src/test/derived/attributeprefetch/summary.cfg +++ b/config-model/src/test/derived/attributeprefetch/summary.cfg @@ -5,26 +5,48 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1980470965 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "singlebyte" classes[].fields[].type "byte" +classes[].fields[].command "attribute" +classes[].fields[].source "singlebyte" classes[].fields[].name "singleint" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "singleint" classes[].fields[].name "singlelong" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "singlelong" classes[].fields[].name "singlefloat" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "singlefloat" classes[].fields[].name "singledouble" classes[].fields[].type "double" +classes[].fields[].command "attribute" +classes[].fields[].source "singledouble" classes[].fields[].name "singlestring" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "singlestring" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/complex/summary.cfg b/config-model/src/test/derived/complex/summary.cfg index 44b97327ee9..1d6f7141635 100644 --- a/config-model/src/test/derived/complex/summary.cfg +++ b/config-model/src/test/derived/complex/summary.cfg @@ -5,40 +5,76 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "woe" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "exact" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "title" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "dyntitle" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "dyntitle" classes[].fields[].name "source" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "stringfield" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 128090024 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "year_sub" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year_sub" classes[].fields[].name "prefixenabled" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "prefixenabled" classes[].fields[].name "fleeting2" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "fleeting2" classes[].fields[].name "foundat" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "foundat" classes[].fields[].name "collapseby" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "collapseby" classes[].fields[].name "ts" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "ts" classes[].fields[].name "combineda" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "combineda" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/emptychild/summary.cfg b/config-model/src/test/derived/emptychild/summary.cfg index 116bad51740..5fe39cbb04c 100644 --- a/config-model/src/test/derived/emptychild/summary.cfg +++ b/config-model/src/test/derived/emptychild/summary.cfg @@ -5,18 +5,32 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "a1" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a1" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1490368133 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "a1" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a1" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/emptydefault/summary.cfg b/config-model/src/test/derived/emptydefault/summary.cfg index f1a858d2d1e..c09b606210f 100644 --- a/config-model/src/test/derived/emptydefault/summary.cfg +++ b/config-model/src/test/derived/emptydefault/summary.cfg @@ -5,7 +5,13 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/id/summary.cfg b/config-model/src/test/derived/id/summary.cfg index 6880a8a7bd5..203be8549b8 100644 --- a/config-model/src/test/derived/id/summary.cfg +++ b/config-model/src/test/derived/id/summary.cfg @@ -5,9 +5,17 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "uri" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/imported_position_field/summary.cfg b/config-model/src/test/derived/imported_position_field/summary.cfg index b324b4cd8e4..c3f3e45e2f0 100644 --- a/config-model/src/test/derived/imported_position_field/summary.cfg +++ b/config-model/src/test/derived/imported_position_field/summary.cfg @@ -5,16 +5,28 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "parent_ref" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1274088866 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/imported_position_field_summary/summary.cfg b/config-model/src/test/derived/imported_position_field_summary/summary.cfg index cf80a3f31d0..06fca8c89a1 100644 --- a/config-model/src/test/derived/imported_position_field_summary/summary.cfg +++ b/config-model/src/test/derived/imported_position_field_summary/summary.cfg @@ -5,27 +5,47 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "parent_ref" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "my_pos" classes[].fields[].type "jsonstring" +classes[].fields[].command "geopos" +classes[].fields[].source "my_pos_zcurve" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 656588065 classes[].name "mysummary" classes[].omitsummaryfeatures false classes[].fields[].name "my_pos" classes[].fields[].type "jsonstring" +classes[].fields[].command "geopos" +classes[].fields[].source "my_pos_zcurve" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1274088866 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/imported_struct_fields/summary.cfg b/config-model/src/test/derived/imported_struct_fields/summary.cfg index 38fdd23123b..46a6a7db64f 100644 --- a/config-model/src/test/derived/imported_struct_fields/summary.cfg +++ b/config-model/src/test/derived/imported_struct_fields/summary.cfg @@ -5,44 +5,78 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "parent_ref" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 2126652894 classes[].name "mysummary" classes[].omitsummaryfeatures false classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].fields[].name "my_elem_array" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "" classes[].fields[].name "my_elem_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "" classes[].fields[].name "my_str_int_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1629947863 classes[].name "filtered" classes[].omitsummaryfeatures false classes[].fields[].name "elem_array_filtered" classes[].fields[].type "jsonstring" +classes[].fields[].command "matchedattributeelementsfilter" +classes[].fields[].source "my_elem_array" classes[].fields[].name "elem_map_filtered" classes[].fields[].type "jsonstring" +classes[].fields[].command "matchedattributeelementsfilter" +classes[].fields[].source "my_elem_map" classes[].fields[].name "str_int_map_filtered" classes[].fields[].type "jsonstring" +classes[].fields[].command "matchedattributeelementsfilter" +classes[].fields[].source "my_str_int_map" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1274088866 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/importedfields/summary.cfg b/config-model/src/test/derived/importedfields/summary.cfg index 4b792d15de9..2614bea2092 100644 --- a/config-model/src/test/derived/importedfields/summary.cfg +++ b/config-model/src/test/derived/importedfields/summary.cfg @@ -5,39 +5,71 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "b_ref_with_summary" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 159551552 classes[].name "mysummary" classes[].omitsummaryfeatures false classes[].fields[].name "a_ref" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "b_ref_with_summary" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "my_int_field" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "my_int_field" classes[].fields[].name "my_string_field" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "my_string_field" classes[].fields[].name "my_int_array_field" classes[].fields[].type "jsonstring" +classes[].fields[].command "attribute" +classes[].fields[].source "my_int_array_field" classes[].fields[].name "my_int_wset_field" classes[].fields[].type "jsonstring" +classes[].fields[].command "attribute" +classes[].fields[].source "my_int_wset_field" classes[].fields[].name "my_ancient_int_field" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "my_ancient_int_field" classes[].fields[].name "my_filtered_int_array_field" classes[].fields[].type "jsonstring" +classes[].fields[].command "matchedattributeelementsfilter" +classes[].fields[].source "my_int_array_field" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1274088866 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/indexswitches/summary.cfg b/config-model/src/test/derived/indexswitches/summary.cfg index a58d5da25e1..edc38aacf89 100644 --- a/config-model/src/test/derived/indexswitches/summary.cfg +++ b/config-model/src/test/derived/indexswitches/summary.cfg @@ -5,13 +5,25 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "source" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "title" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "descr" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/inheritance/summary.cfg b/config-model/src/test/derived/inheritance/summary.cfg index 6d30c0ad231..7615429bebf 100644 --- a/config-model/src/test/derived/inheritance/summary.cfg +++ b/config-model/src/test/derived/inheritance/summary.cfg @@ -5,22 +5,40 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "onlyfather" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1608562186 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "onlygrandparent" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "onlygrandparent" classes[].fields[].name "overridden" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "overridden" classes[].fields[].name "onlymother" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "onlymother" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/integerattributetostringindex/summary.cfg b/config-model/src/test/derived/integerattributetostringindex/summary.cfg index 9c2c8f4cd0e..87a6539de56 100644 --- a/config-model/src/test/derived/integerattributetostringindex/summary.cfg +++ b/config-model/src/test/derived/integerattributetostringindex/summary.cfg @@ -5,28 +5,52 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "attinx" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "attinx" classes[].fields[].name "artist" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "artist" classes[].fields[].name "title" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1706878063 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "attinx" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "attinx" classes[].fields[].name "artist" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "artist" classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/map_attribute/summary.cfg b/config-model/src/test/derived/map_attribute/summary.cfg index b5ee816719e..a18ca43bbd7 100644 --- a/config-model/src/test/derived/map_attribute/summary.cfg +++ b/config-model/src/test/derived/map_attribute/summary.cfg @@ -5,11 +5,21 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "str_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "" classes[].fields[].name "int_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/map_of_struct_attribute/summary.cfg b/config-model/src/test/derived/map_of_struct_attribute/summary.cfg index 997743389c6..c871c4bb97e 100644 --- a/config-model/src/test/derived/map_of_struct_attribute/summary.cfg +++ b/config-model/src/test/derived/map_of_struct_attribute/summary.cfg @@ -5,24 +5,44 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "str_elem_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "" classes[].fields[].name "int_elem_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "new_int_elem_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "copy" +classes[].fields[].source "int_elem_map" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1424421039 classes[].name "rename" classes[].omitsummaryfeatures false classes[].fields[].name "new_str_elem_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "attributecombiner" +classes[].fields[].source "str_elem_map" classes[].fields[].name "new_int_elem_map" classes[].fields[].type "jsonstring" +classes[].fields[].command "copy" +classes[].fields[].source "int_elem_map" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/mlr/summary.cfg b/config-model/src/test/derived/mlr/summary.cfg index 0345ec305ae..8087955a206 100644 --- a/config-model/src/test/derived/mlr/summary.cfg +++ b/config-model/src/test/derived/mlr/summary.cfg @@ -5,22 +5,40 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "b" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1944325986 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "ranklog" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "ranklog" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/multiplesummaries/summary.cfg b/config-model/src/test/derived/multiplesummaries/summary.cfg index c05cb43dade..17d7040bc78 100644 --- a/config-model/src/test/derived/multiplesummaries/summary.cfg +++ b/config-model/src/test/derived/multiplesummaries/summary.cfg @@ -5,192 +5,350 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "loc_pos" classes[].fields[].type "jsonstring" +classes[].fields[].command "geopos" +classes[].fields[].source "loc_pos_zcurve" classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "adynamic" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "adynamic" classes[].fields[].name "abolded" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "abolded" classes[].fields[].name "b" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "d" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "d" classes[].fields[].name "dynamice" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "dynamice" classes[].fields[].name "f" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "g" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "h" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "e" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "adynamic2" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "adynamic2" classes[].fields[].name "alltags" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "sometags" classes[].fields[].type "jsonstring" +classes[].fields[].command "matchedelementsfilter" +classes[].fields[].source "mytags" classes[].fields[].name "anotherb" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "abolded2" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "abolded2" classes[].fields[].name "aboldeddynamic" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "aboldeddynamic" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 783153771 classes[].name "third" classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "adynamic" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "adynamic" classes[].fields[].name "d" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "d" classes[].fields[].name "e" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "f" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "g" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "h" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 815922035 classes[].name "attributesonly1" classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1308077923 classes[].name "notattributesonly1" classes[].omitsummaryfeatures false classes[].fields[].name "adynamic" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "adynamic" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1609068631 classes[].name "anothernotattributesonly2" classes[].omitsummaryfeatures false classes[].fields[].name "adynamic2" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "adynamic2" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "alltags" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "sometags" classes[].fields[].type "jsonstring" +classes[].fields[].command "matchedelementsfilter" +classes[].fields[].source "mytags" classes[].fields[].name "anothera" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "anotherb" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 686755772 classes[].name "notattributesonly3" classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "d" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "d" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1711750363 classes[].name "attributesonly2" classes[].omitsummaryfeatures false classes[].fields[].name "anotdynamic" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "adynamic" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "loc_position" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "loc_pos_zcurve" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1510953467 classes[].name "attributesonly3" classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "anotbolded" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "loc_pos_zcurve" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "loc_pos_zcurve" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 923824943 classes[].name "notattributesonly4" classes[].omitsummaryfeatures false classes[].fields[].name "abolded2" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "abolded2" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 552611075 classes[].name "notattributesonly5" classes[].omitsummaryfeatures false classes[].fields[].name "aboldeddynamic" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "aboldeddynamic" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 146047714 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "loc_pos_zcurve" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "loc_pos_zcurve" classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 324773027 classes[].name "second" classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "a" classes[].fields[].name "adynamic" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "adynamic" classes[].fields[].name "c" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "c" classes[].fields[].name "f" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/music/summary.cfg b/config-model/src/test/derived/music/summary.cfg index 007c2ef3345..10bb238dca7 100644 --- a/config-model/src/test/derived/music/summary.cfg +++ b/config-model/src/test/derived/music/summary.cfg @@ -5,102 +5,200 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "bgndata" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "bgndata" classes[].fields[].name "sales" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "sales" classes[].fields[].name "pto" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "pto" classes[].fields[].name "mid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "mid" classes[].fields[].name "ew" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "ew" classes[].fields[].name "surl" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "userrate" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "pid" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "weight" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "weight" classes[].fields[].name "url" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "isbn" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "fmt" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "albumid" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "disp_song" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "song" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "song" classes[].fields[].name "pfrom" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "bgnpfrom" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "bgnpfrom" classes[].fields[].name "categories" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "data" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "numreview" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "bgnsellers" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "image" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "artist" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "artistspid" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "title" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "newestedition" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "newestedition" classes[].fields[].name "bgnpto" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "bgnpto" classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "did" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "did" classes[].fields[].name "scorekey" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "cbid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "cbid" classes[].fields[].name "metalvalue" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "hiphopvalue" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "powermetalvalue" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "progvalue" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 2060710706 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "sales" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "sales" classes[].fields[].name "pto" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "pto" classes[].fields[].name "mid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "mid" classes[].fields[].name "weight" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "weight" classes[].fields[].name "bgnpfrom" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "bgnpfrom" classes[].fields[].name "newestedition" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "newestedition" classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "did" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "did" classes[].fields[].name "cbid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "cbid" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/newrank/summary.cfg b/config-model/src/test/derived/newrank/summary.cfg index 7f77633602e..79e0aa2ce6c 100644 --- a/config-model/src/test/derived/newrank/summary.cfg +++ b/config-model/src/test/derived/newrank/summary.cfg @@ -5,96 +5,188 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "bgndata" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "bgndata" classes[].fields[].name "sales" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "sales" classes[].fields[].name "pto" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "pto" classes[].fields[].name "mid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "mid" classes[].fields[].name "ew" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "ew" classes[].fields[].name "surl" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "userrate" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "pid" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "weight" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "weight" classes[].fields[].name "url" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "isbn" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "fmt" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "albumid" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "disp_song" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "song" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "song" classes[].fields[].name "pfrom" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "bgnpfrom" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "bgnpfrom" classes[].fields[].name "categories" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "data" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "numreview" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "bgnsellers" classes[].fields[].type "integer" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "image" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "artist" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "artistspid" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "title" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "newestedition" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "newestedition" classes[].fields[].name "bgnpto" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "bgnpto" classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "did" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "did" classes[].fields[].name "scorekey" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "scorekey" classes[].fields[].name "cbid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "cbid" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1606815285 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "sales" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "sales" classes[].fields[].name "pto" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "pto" classes[].fields[].name "mid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "mid" classes[].fields[].name "weight" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "weight" classes[].fields[].name "bgnpfrom" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "bgnpfrom" classes[].fields[].name "newestedition" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "newestedition" classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "did" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "did" classes[].fields[].name "scorekey" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "scorekey" classes[].fields[].name "cbid" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "cbid" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/position_nosummary/summary.cfg b/config-model/src/test/derived/position_nosummary/summary.cfg index 2c46031bdad..cda3a7df60f 100644 --- a/config-model/src/test/derived/position_nosummary/summary.cfg +++ b/config-model/src/test/derived/position_nosummary/summary.cfg @@ -5,16 +5,28 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1530141163 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "pos_zcurve" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "pos_zcurve" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/position_summary/summary.cfg b/config-model/src/test/derived/position_summary/summary.cfg index 7fda1ca0c05..ca26f898b1d 100644 --- a/config-model/src/test/derived/position_summary/summary.cfg +++ b/config-model/src/test/derived/position_summary/summary.cfg @@ -5,18 +5,32 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "pos" classes[].fields[].type "jsonstring" +classes[].fields[].command "geopos" +classes[].fields[].source "pos_zcurve" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1530141163 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "pos_zcurve" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "pos_zcurve" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/predicate_attribute/summary.cfg b/config-model/src/test/derived/predicate_attribute/summary.cfg index d01ddcfcf2d..88a0828f9e1 100644 --- a/config-model/src/test/derived/predicate_attribute/summary.cfg +++ b/config-model/src/test/derived/predicate_attribute/summary.cfg @@ -5,16 +5,28 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "some_predicate_field" classes[].fields[].type "string" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1274088866 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/rankingexpression/summary.cfg b/config-model/src/test/derived/rankingexpression/summary.cfg index a6ba84ca7a9..0dc717c8993 100644 --- a/config-model/src/test/derived/rankingexpression/summary.cfg +++ b/config-model/src/test/derived/rankingexpression/summary.cfg @@ -5,40 +5,76 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "artist" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "title" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "surl" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1736696699 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "year" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "year" classes[].fields[].name "foo1" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "foo1" classes[].fields[].name "foo2" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "foo2" classes[].fields[].name "foo3" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "foo3" classes[].fields[].name "foo4" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "foo4" classes[].fields[].name "bar1" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "bar1" classes[].fields[].name "bar2" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "bar2" classes[].fields[].name "bar3" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "bar3" classes[].fields[].name "bar4" classes[].fields[].type "integer" +classes[].fields[].command "attribute" +classes[].fields[].source "bar4" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/ranktypes/summary.cfg b/config-model/src/test/derived/ranktypes/summary.cfg index b39f10f354b..5499349184b 100644 --- a/config-model/src/test/derived/ranktypes/summary.cfg +++ b/config-model/src/test/derived/ranktypes/summary.cfg @@ -5,11 +5,21 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "title" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "descr" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/reference_fields/summary.cfg b/config-model/src/test/derived/reference_fields/summary.cfg index 2bcabe81c3c..9e70d42d874 100644 --- a/config-model/src/test/derived/reference_fields/summary.cfg +++ b/config-model/src/test/derived/reference_fields/summary.cfg @@ -5,25 +5,43 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "campaign_ref" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 428144659 classes[].name "explicit_summary" classes[].omitsummaryfeatures false classes[].fields[].name "yet_another_ref" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1274088866 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/schemainheritance/summary.cfg b/config-model/src/test/derived/schemainheritance/summary.cfg index 0d54f8ceaf7..d774250f209 100644 --- a/config-model/src/test/derived/schemainheritance/summary.cfg +++ b/config-model/src/test/derived/schemainheritance/summary.cfg @@ -5,46 +5,82 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "parent_field" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "parent_field" classes[].fields[].name "child_field" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "child_field" classes[].fields[].name "pf1" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "cf1" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 2134223620 classes[].name "parent_summary" classes[].omitsummaryfeatures false classes[].fields[].name "pf1" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 524210908 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "parent_field" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "parent_field" classes[].fields[].name "child_field" classes[].fields[].type "longstring" +classes[].fields[].command "attribute" +classes[].fields[].source "child_field" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].id 1486475170 classes[].name "child_summary" classes[].omitsummaryfeatures false classes[].fields[].name "pf1" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "cf1" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/streamingstruct/summary.cfg b/config-model/src/test/derived/streamingstruct/summary.cfg index 4c44f7f38b2..7ed8cb3a192 100644 --- a/config-model/src/test/derived/streamingstruct/summary.cfg +++ b/config-model/src/test/derived/streamingstruct/summary.cfg @@ -5,50 +5,96 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "coupleof" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "anothersummaryfield" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "a" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "m" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "b" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "c" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "c2" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "c3" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "n" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "array1" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "array2" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "array3" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "subject" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "g" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "g" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "snippet" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "snippet" classes[].fields[].name "snippet2" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 109252281 classes[].name "summ" classes[].omitsummaryfeatures false classes[].fields[].name "snippet" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "snippet" classes[].fields[].name "snippet2" classes[].fields[].type "longstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/streamingstructdefault/summary.cfg b/config-model/src/test/derived/streamingstructdefault/summary.cfg index 71b8c1371b3..e06f934554d 100644 --- a/config-model/src/test/derived/streamingstructdefault/summary.cfg +++ b/config-model/src/test/derived/streamingstructdefault/summary.cfg @@ -5,13 +5,25 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "sum1" classes[].fields[].type "longstring" +classes[].fields[].command "dynamicteaser" +classes[].fields[].source "sum1" classes[].fields[].name "f1" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "f2" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/tensor/summary.cfg b/config-model/src/test/derived/tensor/summary.cfg index a5b38684e52..444ab70d2a7 100644 --- a/config-model/src/test/derived/tensor/summary.cfg +++ b/config-model/src/test/derived/tensor/summary.cfg @@ -5,24 +5,44 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "f1" classes[].fields[].type "tensor" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "f3" classes[].fields[].type "tensor" +classes[].fields[].command "attribute" +classes[].fields[].source "f3" classes[].fields[].name "f4" classes[].fields[].type "tensor" +classes[].fields[].command "attribute" +classes[].fields[].source "f4" classes[].fields[].name "f5" classes[].fields[].type "tensor" +classes[].fields[].command "attribute" +classes[].fields[].source "f5" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 219619290 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "f6" classes[].fields[].type "float" +classes[].fields[].command "attribute" +classes[].fields[].source "f6" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/derived/types/summary.cfg b/config-model/src/test/derived/types/summary.cfg index 33af9d88630..6b2085d0975 100644 --- a/config-model/src/test/derived/types/summary.cfg +++ b/config-model/src/test/derived/types/summary.cfg @@ -5,42 +5,80 @@ classes[].name "default" classes[].omitsummaryfeatures false classes[].fields[].name "abyte" classes[].fields[].type "byte" +classes[].fields[].command "attribute" +classes[].fields[].source "abyte" classes[].fields[].name "along" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "along" classes[].fields[].name "abool" classes[].fields[].type "bool" +classes[].fields[].command "attribute" +classes[].fields[].source "abool" classes[].fields[].name "ashortfloat" classes[].fields[].type "float16" +classes[].fields[].command "attribute" +classes[].fields[].source "ashortfloat" classes[].fields[].name "tagfield" classes[].fields[].type "jsonstring" +classes[].fields[].command "attribute" +classes[].fields[].source "tagfield" classes[].fields[].name "stringmapfield" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "album0" classes[].fields[].type "jsonstring" +classes[].fields[].command "" +classes[].fields[].source "" classes[].fields[].name "album1" classes[].fields[].type "jsonstring" +classes[].fields[].command "attribute" +classes[].fields[].source "album1" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" classes[].fields[].name "documentid" classes[].fields[].type "longstring" +classes[].fields[].command "documentid" +classes[].fields[].source "" classes[].id 1027812395 classes[].name "attributeprefetch" classes[].omitsummaryfeatures false classes[].fields[].name "other" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "other" classes[].fields[].name "abyte" classes[].fields[].type "byte" +classes[].fields[].command "attribute" +classes[].fields[].source "abyte" classes[].fields[].name "along" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "along" classes[].fields[].name "abool" classes[].fields[].type "bool" +classes[].fields[].command "attribute" +classes[].fields[].source "abool" classes[].fields[].name "ashortfloat" classes[].fields[].type "float16" +classes[].fields[].command "attribute" +classes[].fields[].source "ashortfloat" classes[].fields[].name "juletre" classes[].fields[].type "int64" +classes[].fields[].command "attribute" +classes[].fields[].source "juletre" classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "rankfeatures" +classes[].fields[].source "" classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" +classes[].fields[].command "summaryfeatures" +classes[].fields[].source "" diff --git a/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java b/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java index a9a230c94a2..c83fc1ac63b 100644 --- a/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java +++ b/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java @@ -66,57 +66,19 @@ public class SummaryTestCase extends AbstractSchemaTestCase { assertEquals(13, summary.fields().size()); - field = fields.next(); - assertEquals("exactemento", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("exact", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("title", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("description", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("dyndesc", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("longdesc", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("longstat", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("dynlong", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("dyndesc2", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); - - field = fields.next(); - assertEquals("measurement", field.getName()); - assertEquals(SummaryClassField.Type.INTEGER, field.getType()); - - field = fields.next(); - assertEquals("rankfeatures", field.getName()); - assertEquals(SummaryClassField.Type.FEATUREDATA, field.getType()); - - field = fields.next(); - assertEquals("summaryfeatures", field.getName()); - assertEquals(SummaryClassField.Type.FEATUREDATA, field.getType()); - - field = fields.next(); - assertEquals("documentid", field.getName()); - assertEquals(SummaryClassField.Type.LONGSTRING, field.getType()); + assertSummaryField("exactemento", SummaryClassField.Type.LONGSTRING, fields.next()); + assertSummaryField("exact", SummaryClassField.Type.LONGSTRING, fields.next()); + assertSummaryField("title", SummaryClassField.Type.LONGSTRING, fields.next()); + assertSummaryField("description", SummaryClassField.Type.LONGSTRING, fields.next()); + assertSummaryField("dyndesc", SummaryClassField.Type.LONGSTRING, "dynamicteaser", "dyndesc", fields.next()); + assertSummaryField("longdesc", SummaryClassField.Type.LONGSTRING, fields.next()); + assertSummaryField("longstat", SummaryClassField.Type.LONGSTRING, fields.next()); + assertSummaryField("dynlong", SummaryClassField.Type.LONGSTRING, "dynamicteaser", "dynlong", fields.next()); + assertSummaryField("dyndesc2", SummaryClassField.Type.LONGSTRING, "dynamicteaser", "dyndesc2", fields.next()); + assertSummaryField("measurement", SummaryClassField.Type.INTEGER, "attribute", "measurement", fields.next()); + assertSummaryField("rankfeatures", SummaryClassField.Type.FEATUREDATA, "rankfeatures", fields.next()); + assertSummaryField("summaryfeatures", SummaryClassField.Type.FEATUREDATA, "summaryfeatures", fields.next()); + assertSummaryField("documentid", SummaryClassField.Type.LONGSTRING, "documentid", fields.next()); } @Test @@ -132,6 +94,23 @@ public class SummaryTestCase extends AbstractSchemaTestCase { assertEquals(SummaryClassField.Type.LONGSTRING, myClass.fields().get("other_campaign_ref").getType()); } + private void assertSummaryField(String expName, SummaryClassField.Type expType, SummaryClassField field) { + assertSummaryField(expName, expType, "", "", field); + } + + private void assertSummaryField(String expName, SummaryClassField.Type expType, String expCommand, SummaryClassField field) { + assertSummaryField(expName, expType, expCommand, "", field); + } + + private void assertSummaryField(String expName, SummaryClassField.Type expType, + String expCommand, String expSource, SummaryClassField field) { + assertEquals(expName, field.getName()); + assertEquals(expType, field.getType()); + assertEquals(expCommand, field.getCommand()); + assertEquals(expSource, field.getSource()); + + } + private static Schema buildCampaignAdModel() throws ParseException { ApplicationBuilder builder = new ApplicationBuilder(); builder.addSchema("search campaign { document campaign {} }"); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java index 4bf4cc71890..c71f3946937 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/ConfigserverClusterTest.java @@ -41,6 +41,7 @@ public class ConfigserverClusterTest { assertZookeeperServerProperty(config.server(), ZookeeperServerConfig.Server::hostname, "localhost"); assertZookeeperServerProperty(config.server(), ZookeeperServerConfig.Server::id, 0); assertEquals(0, config.myid()); + assertEquals("/opt/vespa/conf/zookeeper/tls.conf.json", config.vespaTlsConfigFile()); } @Test @@ -51,6 +52,7 @@ public class ConfigserverClusterTest { assertZookeeperServerProperty(config.server(), ZookeeperServerConfig.Server::id, 0, 1, 2); assertEquals(1, config.myid()); assertEquals("gz", config.snapshotMethod()); + assertEquals("/opt/vespa/conf/zookeeper/tls.conf.json", config.vespaTlsConfigFile()); } @Test @@ -60,6 +62,7 @@ public class ConfigserverClusterTest { assertZookeeperServerProperty(config.server(), ZookeeperServerConfig.Server::hostname, "cfg1", "localhost", "cfg3"); assertZookeeperServerProperty(config.server(), ZookeeperServerConfig.Server::id, 4, 2, 3); assertEquals(2, config.myid()); + assertEquals("/opt/vespa/conf/zookeeper/tls.conf.json", config.vespaTlsConfigFile()); } @Test @@ -71,6 +74,7 @@ public class ConfigserverClusterTest { assertZookeeperServerProperty(config.server(), ZookeeperServerConfig.Server::id, 4, 2, 3); assertEquals(2, config.myid()); assertEquals("gz", config.snapshotMethod()); + assertEquals("", config.vespaTlsConfigFile()); } @Test diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java index e8703f57fe3..c5baee01e28 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/DocprocBuilderTest.java @@ -187,7 +187,6 @@ public class DocprocBuilderTest extends DomBuilderTest { assertEquals(1536, jvm.minHeapsize()); assertEquals(1536, jvm.heapsize()); assertEquals(512, jvm.stacksize()); - assertTrue(qrStartConfig.ulimitv().isEmpty()); assertEquals(0, jvm.compressedClassSpaceSize()); } diff --git a/config/src/Doxyfile b/config/src/Doxyfile deleted file mode 100644 index 73231abd4ac..00000000000 --- a/config/src/Doxyfile +++ /dev/null @@ -1,1255 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.4.7 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = cloudconfig - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../../doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command <command> <input-file>, where <command> is the value of -# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = config - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = *.h \ - *.hpp \ - *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = IAM_DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/configdefinitions/src/vespa/summary.def b/configdefinitions/src/vespa/summary.def index 9b231d86c38..29438fda3b6 100644 --- a/configdefinitions/src/vespa/summary.def +++ b/configdefinitions/src/vespa/summary.def @@ -10,3 +10,8 @@ classes[].name string classes[].omitsummaryfeatures bool default=false classes[].fields[].name string classes[].fields[].type string +# The name of the command that is writing this field. +# See docsumconfig.cpp for all supported commands (DocsumFieldWriter implementations). +classes[].fields[].command string default="" +# The name of the source field used by the command. +classes[].fields[].source string default="" diff --git a/configdefinitions/src/vespa/zookeeper-server.def b/configdefinitions/src/vespa/zookeeper-server.def index a2c4ec3b2db..5cff46dd226 100644 --- a/configdefinitions/src/vespa/zookeeper-server.def +++ b/configdefinitions/src/vespa/zookeeper-server.def @@ -16,8 +16,6 @@ maxClientConnections int default=0 dataDir string default="var/zookeeper" clientPort int default=2181 -# TODO(bjorncs): remove setting - no longer in use -secureClientPort int default=2184 snapshotCount int default=50000 # Purge interval in hours @@ -45,13 +43,8 @@ server[].retired bool default=false # TODO: Consider setting this to false by default (and override where appropriate) trustEmptySnapshot bool default=true -# TLS options -# TODO(bjorncs): todo cleanup after migrating to unified Vespa TLS configuration -tlsForQuorumCommunication enum { OFF, PORT_UNIFICATION, TLS_WITH_PORT_UNIFICATION, TLS_ONLY } default=OFF -# TODO(bjorncs): todo cleanup after migrating to unified Vespa TLS configuration -tlsForClientServerCommunication enum { OFF, PORT_UNIFICATION, TLS_WITH_PORT_UNIFICATION, TLS_ONLY } default=OFF -# TODO(bjorncs): remove setting - no longer in use -jksKeyStoreFile string default="conf/zookeeper/zookeeper.jks" - dynamicReconfiguration bool default=false snapshotMethod string default="gz" + +# Uses default Vespa mTLS config if empty string +vespaTlsConfigFile string default="" diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HealthCheckProxyHandler.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HealthCheckProxyHandler.java index 18490765576..ac50cbbb518 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HealthCheckProxyHandler.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HealthCheckProxyHandler.java @@ -91,8 +91,7 @@ class HealthCheckProxyHandler extends HandlerWrapper { .map(detectorConnFactory -> detectorConnFactory.getBean(SslConnectionFactory.class))) .map(connFactory -> (SslContextFactory.Server) connFactory.getSslContextFactory()) .orElseThrow(() -> new IllegalArgumentException("Health check proxy can only target https port")); - ConnectorConfig.ProxyProtocol proxyProtocolCfg = targetConnector.connectorConfig().proxyProtocol(); - boolean proxyProtocol = proxyProtocolCfg.enabled() && !proxyProtocolCfg.mixedMode(); + boolean proxyProtocol = targetConnector.connectorConfig().proxyProtocol().enabled(); return new ProxyTarget(targetPort, clientTimeout,handlerTimeout, cacheExpiry, sslContextFactory, proxyProtocol); } diff --git a/container-disc/src/main/sh/vespa-start-container-daemon.sh b/container-disc/src/main/sh/vespa-start-container-daemon.sh index b4ce6a03ba8..97f74bd8d26 100755 --- a/container-disc/src/main/sh/vespa-start-container-daemon.sh +++ b/container-disc/src/main/sh/vespa-start-container-daemon.sh @@ -60,7 +60,7 @@ getconfig() { qrstartcfg="`$VESPA_HOME/bin/vespa-get-config -l -w 10 -n search.config.qr-start -i ${VESPA_CONFIG_ID}`" ;; esac - cmds=`echo "$qrstartcfg" | perl -ne 's/^(\w+)\.(\w+) (.*)/$1_$2=$3/ && print'` + cmds=`echo "$qrstartcfg" | sed -n 's/^\([^. ]*\)[.]/\1_/;s/ /=/p'` eval "$cmds" set +e } diff --git a/container-search/src/main/resources/configdefinitions/search.config.qr-start.def b/container-search/src/main/resources/configdefinitions/search.config.qr-start.def index c58f9944d61..e0b7d15085b 100644 --- a/container-search/src/main/resources/configdefinitions/search.config.qr-start.def +++ b/container-search/src/main/resources/configdefinitions/search.config.qr-start.def @@ -40,9 +40,6 @@ jvm.availableProcessors int default=0 restart ## Extra environment variables qrs.env string default="" restart -## Set ulimit -v in start script? this is mainly a safeguard against JNI stuff leaking memory. -ulimitv string default="" restart - ## Extra class path entries, forwarded to vespa-start-container_daemon. Overrides the corresponding env setting. jdisc.classpath_extra string default="" restart diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/RoleDefinition.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/RoleDefinition.java index 32d84d9791d..a9d67c2d78a 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/RoleDefinition.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/RoleDefinition.java @@ -71,10 +71,6 @@ public enum RoleDefinition { Policy.applicationManager, Policy.keyRevokal, Policy.paymentInstrumentRead, - Policy.paymentInstrumentUpdate, - Policy.paymentInstrumentDelete, - Policy.paymentInstrumentCreate, - Policy.planUpdate, Policy.billingInformationRead, Policy.accessRequests ), diff --git a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/role/RoleTest.java b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/role/RoleTest.java index 9dac13482e0..a4ce45f44ea 100644 --- a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/role/RoleTest.java +++ b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/role/RoleTest.java @@ -166,9 +166,9 @@ public class RoleTest { Role admin = Role.administrator(TenantName.from("t1")); assertTrue(publicCdEnforcer.allows(admin, Action.read, paymentInstrumentUri)); - assertTrue(publicCdEnforcer.allows(admin, Action.delete, paymentInstrumentUri)); - assertTrue(publicCdEnforcer.allows(admin, Action.update, tenantPaymentInstrumentUri)); - assertTrue(publicCdEnforcer.allows(admin, Action.read, tokenUri)); + assertFalse(publicCdEnforcer.allows(admin, Action.delete, paymentInstrumentUri)); + assertFalse(publicCdEnforcer.allows(admin, Action.update, tenantPaymentInstrumentUri)); + assertFalse(publicCdEnforcer.allows(admin, Action.read, tokenUri)); } @Test @@ -204,7 +204,6 @@ public class RoleTest { .assertAction(operator) .assertAction(reader) .assertAction(developer) - .assertAction(admin, Action.read) .assertAction(otherAdmin); tester.on("/billing/v1/tenant/t1/instrument") @@ -212,7 +211,7 @@ public class RoleTest { .assertAction(operator, Action.read) .assertAction(reader, Action.read, Action.delete) .assertAction(developer, Action.read, Action.delete) - .assertAction(admin, Action.read, Action.update, Action.delete) + .assertAction(admin, Action.read) .assertAction(otherAdmin); tester.on("/billing/v1/tenant/t1/instrument/i1") @@ -220,7 +219,7 @@ public class RoleTest { .assertAction(operator, Action.read) .assertAction(reader, Action.read, Action.delete) .assertAction(developer, Action.read, Action.delete) - .assertAction(admin, Action.read, Action.update, Action.delete) + .assertAction(admin, Action.read) .assertAction(otherAdmin); tester.on("/billing/v1/tenant/t1/billing") @@ -236,7 +235,7 @@ public class RoleTest { .assertAction(operator, Action.read) .assertAction(reader) .assertAction(developer) - .assertAction(admin, Action.update) + .assertAction(admin) .assertAction(otherAdmin); tester.on("/billing/v1/tenant/t1/collection") diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java index c86f79ce188..93ef6d29450 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentUpgrader.java @@ -52,6 +52,7 @@ public class DeploymentUpgrader extends ControllerMaintainer { Run last = controller().jobController().last(job).get(); Versions target = new Versions(targetPlatform, last.versions().targetRevision(), Optional.of(last.versions().targetPlatform()), Optional.of(last.versions().targetRevision())); + if ( ! last.hasEnded()) continue; if (application.revisions().get(last.versions().targetRevision()).compileVersion() .map(version -> controller().applications().versionCompatibility(instance.id()).refuse(version, target.targetPlatform())) .orElse(false)) continue; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/ErrorResponses.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/ErrorResponses.java new file mode 100644 index 00000000000..4c4633df0ec --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/ErrorResponses.java @@ -0,0 +1,31 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.restapi; + +import com.yahoo.container.jdisc.HttpRequest; +import com.yahoo.restapi.ErrorResponse; + +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Helper class for creating error responses. + * + * @author mpolden + */ +public class ErrorResponses { + + private ErrorResponses() {} + + /** + * Returns a response for a failing request containing an unique request ID. Details of the error are logged through + * given logger. + */ + public static ErrorResponse logThrowing(HttpRequest request, Logger logger, Throwable t) { + String requestId = UUID.randomUUID().toString(); + logger.log(Level.SEVERE, "Unexpected error handling '" + request.getUri() + "' (request ID: " + + requestId + ")", t); + return ErrorResponse.internalServerError("Unexpected error occurred (request ID: " + requestId + ")"); + } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index bb38f7eff0e..0cbd6b61bf8 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -101,6 +101,7 @@ import com.yahoo.vespa.hosted.controller.maintenance.ResourceMeterMaintainer; import com.yahoo.vespa.hosted.controller.notification.Notification; import com.yahoo.vespa.hosted.controller.notification.NotificationSource; import com.yahoo.vespa.hosted.controller.persistence.SupportAccessSerializer; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.context.DeploymentRoutingContext; import com.yahoo.vespa.hosted.controller.routing.rotation.RotationId; @@ -226,13 +227,12 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { return switch (e.code()) { case NOT_FOUND: yield ErrorResponse.notFoundError(Exceptions.toMessageString(e)); case ACTIVATION_CONFLICT: yield new ErrorResponse(CONFLICT, e.code().name(), Exceptions.toMessageString(e)); - case INTERNAL_SERVER_ERROR: yield ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + case INTERNAL_SERVER_ERROR: yield ErrorResponses.logThrowing(request, log, e); default: yield new ErrorResponse(BAD_REQUEST, e.code().name(), Exceptions.toMessageString(e)); }; } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } @@ -1051,7 +1051,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { SlimeUtils.copyObject(responseSlime.get(), responseResultCursor); return new SlimeJsonResponse(responseRoot); } catch (JsonParseException e) { - return ErrorResponse.internalServerError(response); + return ErrorResponses.logThrowing(request, log, e); } } @@ -2742,7 +2742,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { private static Principal requireUserPrincipal(HttpRequest request) { Principal principal = request.getJDiscRequest().getUserPrincipal(); - if (principal == null) throw new RestApiException.InternalServerError("Expected a user principal"); + if (principal == null) throw new IllegalArgumentException("Expected a user principal"); return principal; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java index d45e69f781b..bb55b2e8fcf 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandler.java @@ -27,6 +27,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId; import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanRegistry; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.api.role.SecurityContext; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.tenant.Tenant; import com.yahoo.yolean.Exceptions; @@ -43,7 +44,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.concurrent.Executor; -import java.util.logging.Level; import java.util.stream.Collectors; /** @@ -76,25 +76,18 @@ public class BillingApiHandler extends ThreadedHttpRequestHandler { return ErrorResponse.unauthorized("Must be authenticated to use this API"); Path path = new Path(request.getUri()); - switch (request.getMethod()) { - case GET: - return handleGET(request, path, userId.get()); - case PATCH: - return handlePATCH(request, path, userId.get()); - case DELETE: - return handleDELETE(path, userId.get()); - case POST: - return handlePOST(path, request, userId.get()); - default: - return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); - } + return switch (request.getMethod()) { + case GET -> handleGET(request, path, userId.get()); + case PATCH -> handlePATCH(request, path, userId.get()); + case DELETE -> handleDELETE(path, userId.get()); + case POST -> handlePOST(path, request, userId.get()); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); + }; } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (Exception e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - // Don't expose internal billing details in error message to user - return ErrorResponse.internalServerError("Internal problem while handling billing API request"); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java index 4532e0c2c18..8722e588fa7 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2.java @@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.controller.restapi.billing; import com.yahoo.config.provision.TenantName; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.ThreadedHttpRequestHandler; -import com.yahoo.restapi.ErrorResponse; import com.yahoo.restapi.MessageResponse; import com.yahoo.restapi.RestApi; import com.yahoo.restapi.RestApiException; @@ -14,7 +13,6 @@ import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; import com.yahoo.slime.Type; -import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.ApplicationController; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.TenantController; @@ -27,7 +25,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanRegistry; import com.yahoo.vespa.hosted.controller.api.integration.billing.Quota; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.api.role.SecurityContext; -import com.yahoo.vespa.hosted.controller.application.QuotaUsage; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; import com.yahoo.vespa.hosted.controller.tenant.Tenant; @@ -39,11 +37,15 @@ import java.time.format.DateTimeFormatter; import java.util.Comparator; import java.util.List; import java.util.Optional; +import java.util.logging.Logger; /** * @author ogronnesby */ public class BillingApiHandlerV2 extends RestApiRequestHandler<BillingApiHandlerV2> { + + private static final Logger log = Logger.getLogger(BillingApiHandlerV2.class.getName()); + private static final String[] CSV_INVOICE_HEADER = new String[]{ "ID", "Tenant", "From", "To", "CpuHours", "MemoryHours", "DiskHours", "Cpu", "Memory", "Disk", "Additional" }; private final ApplicationController applications; @@ -85,7 +87,7 @@ public class BillingApiHandlerV2 extends RestApiRequestHandler<BillingApiHandler .post(Slime.class, self::createBill)) .addRoute(RestApi.route("/billing/v2/accountant/plans") .get(self::plans)) - .addExceptionMapper(RuntimeException.class, (__, e) -> ErrorResponse.internalServerError(e.getMessage())) + .addExceptionMapper(RuntimeException.class, (c, e) -> ErrorResponses.logThrowing(c.request(), log, e)) .build(); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java index a3b77e22f1d..813d2b8d3e6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java @@ -23,13 +23,13 @@ import com.yahoo.vespa.hosted.controller.api.integration.vcmr.VespaChangeRequest import com.yahoo.vespa.hosted.controller.auditlog.AuditLoggingRequestHandler; import com.yahoo.vespa.hosted.controller.maintenance.ChangeManagementAssessor; import com.yahoo.vespa.hosted.controller.persistence.ChangeRequestSerializer; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.yolean.Exceptions; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.logging.Level; import java.util.stream.Collectors; public class ChangeManagementApiHandler extends AuditLoggingRequestHandler { @@ -61,8 +61,7 @@ public class ChangeManagementApiHandler extends AuditLoggingRequestHandler { } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandler.java index 467b0c094cc..e764fed4653 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandler.java @@ -17,11 +17,11 @@ import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; import com.yahoo.vespa.hosted.controller.auditlog.AuditLoggingRequestHandler; import com.yahoo.vespa.hosted.controller.proxy.ConfigServerRestExecutor; import com.yahoo.vespa.hosted.controller.proxy.ProxyRequest; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.yolean.Exceptions; import java.net.URI; import java.util.List; -import java.util.logging.Level; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -69,9 +69,7 @@ public class ConfigServerApiHandler extends AuditLoggingRequestHandler { } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "', " - + Exceptions.toMessageString(e)); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java index 776fcbfd03b..9278d030db6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiHandler.java @@ -24,6 +24,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobId; import com.yahoo.vespa.hosted.controller.auditlog.AuditLoggingRequestHandler; import com.yahoo.vespa.hosted.controller.maintenance.ControllerMaintenance; import com.yahoo.vespa.hosted.controller.maintenance.Upgrader; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.support.access.SupportAccess; import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence; import com.yahoo.yolean.Exceptions; @@ -38,7 +39,6 @@ import java.util.Optional; import java.util.OptionalInt; import java.util.Scanner; import java.util.function.Function; -import java.util.logging.Level; /** * This implements the controller/v1 API which provides operators with information about, @@ -73,8 +73,7 @@ public class ControllerApiHandler extends AuditLoggingRequestHandler { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java index 9b400fdfb78..74a28276c79 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/BadgeApiHandler.java @@ -15,6 +15,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType; import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatus; import com.yahoo.vespa.hosted.controller.deployment.JobStatus; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.yolean.Exceptions; import java.io.IOException; @@ -25,7 +26,6 @@ import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; import java.util.function.Supplier; -import java.util.logging.Level; import java.util.logging.Logger; import static java.nio.charset.StandardCharsets.UTF_8; @@ -59,8 +59,7 @@ public class BadgeApiHandler extends ThreadedHttpRequestHandler { } catch (IllegalArgumentException|IllegalStateException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/CliApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/CliApiHandler.java index ab8b6a1d26f..336352e931a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/CliApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/CliApiHandler.java @@ -10,10 +10,9 @@ import com.yahoo.restapi.Path; import com.yahoo.restapi.SlimeJsonResponse; import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.yolean.Exceptions; -import java.util.logging.Level; - /** * This handler implements the /cli/v1/ API. The API allows Vespa CLI to retrieve information about the system, without * authorization. One example of such information is the minimum Vespa CLI version supported by our APIs. @@ -44,8 +43,7 @@ public class CliApiHandler extends ThreadedHttpRequestHandler { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java index 7e43de9f274..1bf2f78f866 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java @@ -21,6 +21,7 @@ import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatus; import com.yahoo.vespa.hosted.controller.deployment.Run; import com.yahoo.vespa.hosted.controller.deployment.Versions; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.restapi.application.EmptyResponse; import com.yahoo.vespa.hosted.controller.versions.DeploymentStatistics; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; @@ -31,7 +32,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.TreeMap; -import java.util.logging.Level; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -60,18 +60,17 @@ public class DeploymentApiHandler extends ThreadedHttpRequestHandler { @Override public HttpResponse handle(HttpRequest request) { try { - switch (request.getMethod()) { - case GET: return handleGET(request); - case OPTIONS: return handleOPTIONS(); - default: return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); - } + return switch (request.getMethod()) { + case GET -> handleGET(request); + case OPTIONS -> handleOPTIONS(); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); + }; } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java index f9f3025837d..3c0ec666415 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/HorizonApiHandler.java @@ -20,6 +20,7 @@ import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.api.role.RoleDefinition; import com.yahoo.vespa.hosted.controller.api.role.SecurityContext; import com.yahoo.vespa.hosted.controller.api.role.TenantRole; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.yolean.Exceptions; import java.io.IOException; @@ -28,7 +29,6 @@ import java.io.OutputStream; import java.util.EnumSet; import java.util.Optional; import java.util.Set; -import java.util.logging.Level; import java.util.stream.Collectors; /** @@ -63,19 +63,18 @@ public class HorizonApiHandler extends ThreadedHttpRequestHandler { return ErrorResponse.forbidden("No tenant with enabled metrics view"); try { - switch (request.getMethod()) { - case GET: return get(request); - case POST: return post(request, authorizedTenants, operator); - case PUT: return put(request); - default: return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); - } + return switch (request.getMethod()) { + case GET -> get(request); + case POST -> post(request, authorizedTenants, operator); + case PUT -> put(request); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); + }; } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError("An unexpected error occurred"); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java index d6a0e785b43..2211e83c51a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriter.java @@ -9,9 +9,11 @@ import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; import java.io.IOException; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author valerijf @@ -24,21 +26,21 @@ public class TsdbQueryRewriter { JsonNode root = mapper.readTree(data); requireLegalType(root); getField(root, "executionGraph", ArrayNode.class) - .ifPresent(graph -> rewriteQueryGraph(graph, authorizedTenants, operator, systemName)); + .ifPresent(graph -> rewriteQueryGraph(root, graph, authorizedTenants, operator, systemName)); getField(root, "filters", ArrayNode.class) .ifPresent(filters -> rewriteFilters(filters, authorizedTenants, operator, systemName)); getField(root, "queries", ArrayNode.class) - .ifPresent(graph -> rewriteQueryGraph(graph, authorizedTenants, operator, systemName)); + .ifPresent(graph -> rewriteQueryGraph(root, graph, authorizedTenants, operator, systemName)); return mapper.writeValueAsBytes(root); } - private static void rewriteQueryGraph(ArrayNode executionGraph, Set<TenantName> tenantNames, boolean operator, SystemName systemName) { + private static void rewriteQueryGraph(JsonNode root, ArrayNode executionGraph, Set<TenantName> tenantNames, boolean operator, SystemName systemName) { for (int i = 0; i < executionGraph.size(); i++) { JsonNode execution = executionGraph.get(i); // Will be handled by rewriteFilters() - if (execution.has("filterId")) continue; + if (execution.has("filterId") && filterExists(root, execution.get("filterId").asText())) continue; rewriteFilter((ObjectNode) execution, tenantNames, operator, systemName); } @@ -80,6 +82,16 @@ public class TsdbQueryRewriter { } } + private static boolean filterExists(JsonNode root, String filterId) { + return getField(root, "filters", ArrayNode.class).stream() + .flatMap(filters -> IntStream.range(0, filters.size()) + .mapToObj(i -> filters.get(i).get("id"))) + .filter(Objects::nonNull) + .filter(JsonNode::isTextual) + .map(JsonNode::asText) + .anyMatch(filterId::equals); + } + private static void requireLegalType(JsonNode root) { Optional.ofNullable(root.get("type")) .map(JsonNode::asText) diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java index 0e764b98514..77d0e799101 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiHandler.java @@ -25,6 +25,7 @@ import com.yahoo.vespa.hosted.controller.auditlog.AuditLoggingRequestHandler; import com.yahoo.vespa.hosted.controller.maintenance.ControllerMaintenance; import com.yahoo.vespa.hosted.controller.maintenance.OsUpgradeScheduler; import com.yahoo.vespa.hosted.controller.maintenance.OsUpgradeScheduler.Change; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.versions.OsVersionTarget; import com.yahoo.yolean.Exceptions; @@ -37,7 +38,6 @@ import java.util.Optional; import java.util.Set; import java.util.StringJoiner; import java.util.function.Function; -import java.util.logging.Level; import java.util.stream.Collectors; /** @@ -71,8 +71,7 @@ public class OsApiHandler extends AuditLoggingRequestHandler { } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java index 082b11af351..2ecd63546e6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java @@ -27,6 +27,7 @@ import com.yahoo.vespa.hosted.controller.application.Endpoint; import com.yahoo.vespa.hosted.controller.application.EndpointList; import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.auditlog.AuditLoggingRequestHandler; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.routing.RoutingStatus; import com.yahoo.vespa.hosted.controller.routing.context.DeploymentRoutingContext; import com.yahoo.vespa.hosted.controller.routing.context.RoutingContext; @@ -38,7 +39,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.logging.Level; import java.util.stream.Collectors; /** @@ -69,8 +69,7 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsHandler.java index ed27ffad978..e9b087690ff 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/systemflags/SystemFlagsHandler.java @@ -12,9 +12,9 @@ import com.yahoo.vespa.hosted.controller.api.integration.ControllerIdentityProvi import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; import com.yahoo.vespa.hosted.controller.api.systemflags.v1.FlagsTarget; import com.yahoo.vespa.hosted.controller.api.systemflags.v1.SystemFlagsDataArchive; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import java.util.concurrent.Executor; -import java.util.logging.Level; /** * Handler implementation for '/system-flags/v1', an API for controlling system-wide feature flags @@ -38,12 +38,10 @@ public class SystemFlagsHandler extends ThreadedHttpRequestHandler { @Override public HttpResponse handle(HttpRequest request) { - switch (request.getMethod()) { - case PUT: - return put(request); - default: - return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is unsupported"); - } + return switch (request.getMethod()) { + case PUT -> put(request); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is unsupported"); + }; } private HttpResponse put(HttpRequest request) { @@ -63,9 +61,7 @@ public class SystemFlagsHandler extends ThreadedHttpRequestHandler { SystemFlagsDeployResult result = deployer.deployFlags(archive, dryRun); return new JacksonJsonResponse<>(200, result.toWire()); } catch (Exception e) { - String errorMessage = "System flags deploy failed: " + e.getMessage(); - log.log(Level.SEVERE, errorMessage, e); - return ErrorResponse.internalServerError(errorMessage); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java index a407e5aa211..9cced2b8159 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java @@ -8,6 +8,7 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.ThreadedHttpRequestHandler; import com.yahoo.io.IOUtils; +import com.yahoo.jdisc.http.filter.security.misc.User; import com.yahoo.restapi.ErrorResponse; import com.yahoo.restapi.MessageResponse; import com.yahoo.restapi.Path; @@ -27,7 +28,6 @@ import com.yahoo.vespa.hosted.controller.LockedTenant; import com.yahoo.vespa.hosted.controller.api.integration.billing.Plan; import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId; import com.yahoo.vespa.hosted.controller.api.integration.user.Roles; -import com.yahoo.jdisc.http.filter.security.misc.User; import com.yahoo.vespa.hosted.controller.api.integration.user.UserId; import com.yahoo.vespa.hosted.controller.api.integration.user.UserManagement; import com.yahoo.vespa.hosted.controller.api.role.Role; @@ -35,6 +35,7 @@ import com.yahoo.vespa.hosted.controller.api.role.RoleDefinition; import com.yahoo.vespa.hosted.controller.api.role.SecurityContext; import com.yahoo.vespa.hosted.controller.api.role.SimplePrincipal; import com.yahoo.vespa.hosted.controller.api.role.TenantRole; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.vespa.hosted.controller.restapi.application.EmptyResponse; import com.yahoo.vespa.hosted.controller.tenant.Tenant; import com.yahoo.yolean.Exceptions; @@ -51,7 +52,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.function.Function; -import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -95,8 +95,7 @@ public class UserApiHandler extends ThreadedHttpRequestHandler { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "'", e); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java index e2c20929be5..7978e64482b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v1/ZoneApiHandler.java @@ -14,11 +14,11 @@ import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; import com.yahoo.vespa.hosted.controller.api.integration.ServiceRegistry; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.yolean.Exceptions; import java.util.Comparator; import java.util.List; -import java.util.logging.Level; /** * Read-only REST API that provides information about zones in hosted Vespa (version 1) @@ -38,18 +38,14 @@ public class ZoneApiHandler extends ThreadedHttpRequestHandler { @Override public HttpResponse handle(HttpRequest request) { try { - switch (request.getMethod()) { - case GET: - return get(request); - default: - return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is unsupported"); - } + return switch (request.getMethod()) { + case GET -> get(request); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is unsupported"); + }; } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "', " - + Exceptions.toMessageString(e)); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java index e3f1e9b5f94..c9bbdc2c005 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiHandler.java @@ -18,10 +18,9 @@ import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; import com.yahoo.vespa.hosted.controller.auditlog.AuditLoggingRequestHandler; import com.yahoo.vespa.hosted.controller.proxy.ConfigServerRestExecutor; import com.yahoo.vespa.hosted.controller.proxy.ProxyRequest; +import com.yahoo.vespa.hosted.controller.restapi.ErrorResponses; import com.yahoo.yolean.Exceptions; -import java.util.logging.Level; - /** * REST API for proxying requests to config servers in a given zone (version 2). * @@ -45,23 +44,15 @@ public class ZoneApiHandler extends AuditLoggingRequestHandler { @Override public HttpResponse auditAndHandle(HttpRequest request) { try { - switch (request.getMethod()) { - case GET: - return get(request); - case POST: - case PUT: - case DELETE: - case PATCH: - return proxy(request); - default: - return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is unsupported"); - } + return switch (request.getMethod()) { + case GET -> get(request); + case POST, PUT, DELETE, PATCH -> proxy(request); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is unsupported"); + }; } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { - log.log(Level.WARNING, "Unexpected error handling '" + request.getUri() + "', " - + Exceptions.toMessageString(e)); - return ErrorResponse.internalServerError(Exceptions.toMessageString(e)); + return ErrorResponses.logThrowing(request, log, e); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java index aa9cb57f541..73d4daf92da 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerTest.java @@ -85,24 +85,6 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - void setting_and_deleting_instrument() { - assertTrue(billingController.getDefaultInstrument(tenant).isEmpty()); - - var instrumentRequest = request("/billing/v1/tenant/tenant1/instrument", PATCH) - .data("{\"active\": \"id-1\"}") - .roles(tenantRole); - - tester.assertResponse(instrumentRequest, "OK"); - assertEquals("id-1", billingController.getDefaultInstrument(tenant).get().getId()); - - var deleteInstrumentRequest = request("/billing/v1/tenant/tenant1/instrument/id-1", DELETE) - .roles(tenantRole); - - tester.assertResponse(deleteInstrumentRequest, "OK"); - assertTrue(billingController.getDefaultInstrument(tenant).isEmpty()); - } - - @Test void response_list_bills() { var bill = createBill(); @@ -197,15 +179,6 @@ public class BillingApiHandlerTest extends ControllerContainerCloudTest { } @Test - void setting_plans() { - var planRequest = request("/billing/v1/tenant/tenant1/plan", PATCH) - .data("{\"plan\": \"new-plan\"}") - .roles(tenantRole); - tester.assertResponse(planRequest, "Plan: new-plan"); - assertEquals("new-plan", billingController.getPlan(tenant).value()); - } - - @Test void csv_export() { var bill = createBill(); billingController.addBill(tenant, bill, true); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java index c62a9f1399f..857dcbac6fd 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/billing/BillingApiHandlerV2Test.java @@ -74,24 +74,16 @@ public class BillingApiHandlerV2Test extends ControllerContainerCloudTest { } @Test - void require_admin_for_update_plan() { - var request = request("/billing/v2/tenant/" + tenant.value(), Request.Method.PATCH) - .data("{\"plan\": \"paid\"}"); - - var forbidden = request.roles(tenantReader); - tester.assertResponse(forbidden, ACCESS_DENIED, 403); - var success = request.roles(tenantAdmin); - tester.assertResponse(success, """ - {"tenant":"tenant1","plan":{"id":"paid","name":"Paid Plan - for testing purposes"},"collection":"AUTO"}"""); - } - - @Test void require_accountant_for_update_collection() { var request = request("/billing/v2/tenant/" + tenant.value(), Request.Method.PATCH) .data("{\"collection\": \"INVOICE\"}"); var forbidden = request.roles(tenantAdmin); - tester.assertResponse(forbidden, "{\"error-code\":\"FORBIDDEN\",\"message\":\"Only accountant can change billing method\"}", 403); + tester.assertResponse(forbidden, """ + { + "code" : 403, + "message" : "Access denied" + }""", 403); var success = request.roles(financeAdmin); tester.assertResponse(success, """ diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java index d0d169720d0..7f826566ebc 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/horizon/TsdbQueryRewriterTest.java @@ -3,11 +3,8 @@ package com.yahoo.vespa.hosted.controller.restapi.horizon; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; -import com.yahoo.slime.JsonFormat; -import com.yahoo.slime.SlimeUtils; import org.junit.jupiter.api.Test; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; diff --git a/document/src/tests/annotation/annotation_test.cpp b/document/src/tests/annotation/annotation_test.cpp index 2700cfcf96f..b18fa113d9b 100644 --- a/document/src/tests/annotation/annotation_test.cpp +++ b/document/src/tests/annotation/annotation_test.cpp @@ -156,8 +156,8 @@ TEST("requireThatAnnotationsCanHaveValues") { TEST("requireThatAnnotationsCanReferenceAnnotations") { auto root = std::make_unique<SpanList>(); SpanTree tree("html", std::move(root)); - size_t san_index = tree.annotate(makeUP(new Annotation(text_type))); - size_t fran_index = tree.annotate(makeUP(new Annotation(text_type))); + size_t san_index = tree.annotate(Annotation(text_type)); + size_t fran_index = tree.annotate(Annotation(text_type)); AnnotationReferenceDataType annotation_ref_type(text_type, 101); ArrayDataType array_type(annotation_ref_type); diff --git a/document/src/tests/serialization/vespadocumentserializer_test.cpp b/document/src/tests/serialization/vespadocumentserializer_test.cpp index 40d78327ab4..7528878bfb5 100644 --- a/document/src/tests/serialization/vespadocumentserializer_test.cpp +++ b/document/src/tests/serialization/vespadocumentserializer_test.cpp @@ -626,7 +626,7 @@ TEST("requireThatDocumentWithDocumentCanBeSerialized") { const AnnotationType *a_type =my_repo.getAnnotationType(*inner_type, a_id); StringFieldValue str("foo"); auto tree = std::make_unique<SpanTree>("name", std::make_unique<Span>(0, 3)); - tree->annotate(std::make_unique<Annotation>(*a_type)); + tree->annotate(Annotation(*a_type)); setSpanTree(str, *tree); diff --git a/document/src/vespa/document/annotation/spantree.cpp b/document/src/vespa/document/annotation/spantree.cpp index d483d6c08ca..4d24b4ce788 100644 --- a/document/src/vespa/document/annotation/spantree.cpp +++ b/document/src/vespa/document/annotation/spantree.cpp @@ -12,20 +12,20 @@ namespace document { SpanTree::~SpanTree() = default; size_t -SpanTree::annotate(std::unique_ptr<Annotation> annotation_) { - _annotations.push_back(std::move(*annotation_)); +SpanTree::annotate(Annotation&& annotation_) { + _annotations.push_back(std::move(annotation_)); return _annotations.size() - 1; } size_t -SpanTree::annotate(const SpanNode &node, std::unique_ptr<Annotation> annotation_) { - annotation_->setSpanNode(node); +SpanTree::annotate(const SpanNode &node, Annotation&& annotation_) { + annotation_.setSpanNode(node); return annotate(std::move(annotation_)); } size_t -SpanTree::annotate(const SpanNode &node, const AnnotationType &type) { - return annotate(node, std::make_unique<Annotation>(type)); +SpanTree::annotate(const SpanNode &node, const AnnotationType &annotation_type) { + return annotate(node, Annotation(annotation_type)); } void diff --git a/document/src/vespa/document/annotation/spantree.h b/document/src/vespa/document/annotation/spantree.h index 7635350025b..03ee820466c 100644 --- a/document/src/vespa/document/annotation/spantree.h +++ b/document/src/vespa/document/annotation/spantree.h @@ -29,9 +29,9 @@ public: ~SpanTree(); // The annotate functions return the annotation index. - size_t annotate(std::unique_ptr<Annotation> annotation); - size_t annotate(const SpanNode &node, std::unique_ptr<Annotation> a); - size_t annotate(const SpanNode &node, const AnnotationType &a_type); + size_t annotate(Annotation&& annotation_); + size_t annotate(const SpanNode& node, Annotation&& annotation_); + size_t annotate(const SpanNode& node, const AnnotationType& annotation_type); Annotation & annotation(size_t index) { return _annotations[index]; } const Annotation & annotation(size_t index) const { return _annotations[index]; } diff --git a/documentapi/src/Doxyfile b/documentapi/src/Doxyfile deleted file mode 100644 index e0a9714d2e9..00000000000 --- a/documentapi/src/Doxyfile +++ /dev/null @@ -1,1213 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.4.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = documentapi - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../../doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command <command> <input-file>, where <command> is the value of -# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = documentapi - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = *.h *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = IAM_DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/fnet/src/Doxyfile b/fnet/src/Doxyfile deleted file mode 100644 index 8e0f0232f35..00000000000 --- a/fnet/src/Doxyfile +++ /dev/null @@ -1,939 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.2.15 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = FNET - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = head - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../doc/doxygen - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, -# German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, -# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish. - -OUTPUT_LANGUAGE = English - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these class will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower case letters. If set to YES upper case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are adviced to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explict @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# reimplements. - -INHERIT_DOCS = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consist of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = fnet fnet/frt fnet/testkit - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl - -FILE_PATTERNS = *.h *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse. - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = FNET_ FRT_ - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the Html help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, -# or Internet explorer 4.0+). Note that for large projects the tree generation -# can take a very long time. In such cases it is better to disable this feature. -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimised for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assigments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_XML = NO - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = IAM_DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line and do not end with a semicolon. Such function macros are typically -# used for boiler-plate code, and will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tagfiles. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superceded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yield more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermedate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO - -# The CGI_NAME tag should be the name of the CGI script that -# starts the search engine (doxysearch) with the correct parameters. -# A script with this name will be generated by doxygen. - -CGI_NAME = search.cgi - -# The CGI_URL tag should be the absolute URL to the directory where the -# cgi binaries are located. See the documentation of your http daemon for -# details. - -CGI_URL = - -# The DOC_URL tag should be the absolute URL to the directory where the -# documentation is located. If left blank the absolute path to the -# documentation, with file:// prepended to it, will be used. - -DOC_URL = - -# The DOC_ABSPATH tag should be the absolute path to the directory where the -# documentation is located. If left blank the directory on the local machine -# will be used. - -DOC_ABSPATH = - -# The BIN_ABSPATH tag must point to the directory where the doxysearch binary -# is installed. - -BIN_ABSPATH = /usr/local/bin/ - -# The EXT_DOC_PATHS tag can be used to specify one or more paths to -# documentation generated for other projects. This allows doxysearch to search -# the documentation for these projects as well. - -EXT_DOC_PATHS = diff --git a/fnet/src/vespa/fnet/frt/require_capabilities.cpp b/fnet/src/vespa/fnet/frt/require_capabilities.cpp index 5f87f98436e..6996557c91e 100644 --- a/fnet/src/vespa/fnet/frt/require_capabilities.cpp +++ b/fnet/src/vespa/fnet/frt/require_capabilities.cpp @@ -29,7 +29,7 @@ FRT_RequireCapabilities::allow(FRT_RPCRequest& req) const noexcept "Peer at %s with %s. Call requires %s, but peer has %s", ((mode == CapabilityEnforcementMode::LogOnly) ? "(Dry-run only, not enforced): " : ""), method_name.c_str(), peer_spec.c_str(), - to_string(auth_ctx.peer_credentials()).c_str(), + auth_ctx.peer_credentials().to_string().c_str(), _required_capabilities.to_string().c_str(), auth_ctx.capabilities().to_string().c_str()); return (mode != CapabilityEnforcementMode::Enforce); diff --git a/fsa/doc/Doxyfile b/fsa/doc/Doxyfile deleted file mode 100644 index cc4d0ab88c4..00000000000 --- a/fsa/doc/Doxyfile +++ /dev/null @@ -1,1099 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.3.5 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = fsa - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 2.0.1 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ../src - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc - -FILE_PATTERNS = *.h *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 3 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = NO - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/messagebus/src/Doxyfile b/messagebus/src/Doxyfile deleted file mode 100644 index 36feecfb9e3..00000000000 --- a/messagebus/src/Doxyfile +++ /dev/null @@ -1,1257 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.4.7 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = messagebus - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../../doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command <command> <input-file>, where <command> is the value of -# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = messagebus - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = *.h \ - *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = messagebus/testlib \ - messagebus/sanity.cpp \ - messagebus/config-messagebus.h \ - messagebus/config-messagebus.cpp - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = IAM_DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java index 2908cf39fc8..87dd42d8008 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/Acl.java @@ -2,7 +2,6 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; import com.google.common.net.InetAddresses; -import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.node.admin.task.util.network.IPVersion; import java.net.InetAddress; @@ -45,7 +44,7 @@ public class Acl { this(trustedPorts, trustedNodes, Set.of()); } - public List<String> toRules(IPVersion ipVersion, NodeType nodeType) { + public List<String> toRules(IPVersion ipVersion) { List<String> rules = new LinkedList<>(); // We reject with rules instead of using policies @@ -67,26 +66,20 @@ public class Acl { rules.add("-A INPUT -p tcp -m multiport --dports " + joinPorts(trustedPorts) + " -j ACCEPT"); } - // Trust ZooKeeper from other config servers/controllers only - if (nodeType.isConfigServerLike()) { - Set<Integer> zooKeeperPorts = Set.of(2181, 2182, 2183); - List<String> clusterAddresses = getTrustedNodes(ipVersion).stream() - .filter(node -> node.type() == nodeType) - .map(Node::inetAddressString) - .sorted() - .toList(); - for (var ipAddress : clusterAddresses) { - rules.add("-A INPUT -s " + ipAddress + ipVersion.singleHostCidr() + " -p tcp -m multiport --dports " + - joinPorts(zooKeeperPorts) + " -j ACCEPT"); - } - // Reject any other connections to ZooKeeper - rules.add("-A INPUT -p tcp -m multiport --dports " + joinPorts(zooKeeperPorts) + - " -j REJECT --reject-with " + ipVersion.icmpPortUnreachable()); - } - - // Allow traffic from trusted nodes + // Allow traffic from trusted nodes, limited to specific ports, if any getTrustedNodes(ipVersion).stream() - .map(node -> "-A INPUT -s " + node.inetAddressString() + ipVersion.singleHostCidr() + " -j ACCEPT") + .map(node -> { + StringBuilder rule = new StringBuilder(); + rule.append("-A INPUT -s ") + .append(node.inetAddressString()) + .append(ipVersion.singleHostCidr()); + if (!node.ports.isEmpty()) { + rule.append(" -p tcp -m multiport --dports ") + .append(joinPorts(node.ports())); + } + rule.append(" -j ACCEPT"); + return rule.toString(); + }) .sorted() .forEach(rules::add); @@ -103,7 +96,7 @@ public class Acl { } private static String joinPorts(Collection<Integer> ports) { - return ports.stream().map(String::valueOf).sorted().collect(Collectors.joining(",")); + return ports.stream().sorted().map(String::valueOf).collect(Collectors.joining(",")); } public Set<Node> getTrustedNodes() { @@ -158,10 +151,10 @@ public class Acl { return Optional.ofNullable(set).map(Set::copyOf).orElseGet(Set::of); } - public record Node(String hostname, NodeType type, InetAddress inetAddress) { + public record Node(String hostname, InetAddress inetAddress, Set<Integer> ports) { - public Node(String hostname, NodeType type, String ipAddress) { - this(hostname, type, InetAddresses.forString(ipAddress)); + public Node(String hostname, String ipAddress, Set<Integer> ports) { + this(hostname, InetAddresses.forString(ipAddress), ports); } public String inetAddressString() { @@ -173,7 +166,7 @@ public class Acl { return "Node{" + "hostname='" + hostname + '\'' + ", inetAddress=" + inetAddress + - ", nodeType=" + type + + ", ports=" + ports + '}'; } } @@ -197,12 +190,16 @@ public class Acl { return this; } - public Builder withTrustedNode(String hostname, String ipAddress, NodeType nodeType) { - return withTrustedNode(new Node(hostname, nodeType, ipAddress)); + public Builder withTrustedNode(String hostname, String ipAddress) { + return withTrustedNode(hostname, ipAddress, Set.of()); + } + + public Builder withTrustedNode(String hostname, String ipAddress, Set<Integer> ports) { + return withTrustedNode(new Node(hostname, ipAddress, ports)); } - public Builder withTrustedNode(String hostname, InetAddress inetAddress, NodeType nodeType) { - return withTrustedNode(new Node(hostname, nodeType, inetAddress)); + public Builder withTrustedNode(String hostname, InetAddress inetAddress, Set<Integer> ports) { + return withTrustedNode(new Node(hostname, inetAddress, ports)); } public Builder withTrustedPorts(Integer... ports) { diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java index 51111a66d10..34ff4feb548 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java @@ -98,7 +98,7 @@ public class RealNodeRepository implements NodeRepository { .collect(Collectors.groupingBy( GetAclResponse.Node::getTrustedBy, Collectors.mapping( - node -> new Acl.Node(node.hostname, NodeType.valueOf(node.nodeType), node.ipAddress), + node -> new Acl.Node(node.hostname, node.ipAddress, Set.copyOf(node.ports)), Collectors.toSet()))); // Group trusted networks by container hostname that trusts them diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/GetAclResponse.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/GetAclResponse.java index 9afee6f7463..08d145b3ac8 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/GetAclResponse.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/bindings/GetAclResponse.java @@ -28,9 +28,9 @@ public class GetAclResponse { public GetAclResponse(@JsonProperty("trustedNodes") List<Node> trustedNodes, @JsonProperty("trustedNetworks") List<Network> trustedNetworks, @JsonProperty("trustedPorts") List<Port> trustedPorts) { - this.trustedNodes = trustedNodes == null ? List.of() : trustedNodes; - this.trustedNetworks = trustedNetworks == null ? List.of() : trustedNetworks; - this.trustedPorts = trustedPorts == null ? List.of() : trustedPorts; + this.trustedNodes = trustedNodes == null ? List.of() : List.copyOf(trustedNodes); + this.trustedNetworks = trustedNetworks == null ? List.of() : List.copyOf(trustedNetworks); + this.trustedPorts = trustedPorts == null ? List.of() : List.copyOf(trustedPorts); } @JsonIgnoreProperties(ignoreUnknown = true) @@ -45,16 +45,20 @@ public class GetAclResponse { @JsonProperty("ipAddress") public final String ipAddress; + @JsonProperty("ports") + public final List<Integer> ports; + @JsonProperty("trustedBy") public final String trustedBy; @JsonCreator public Node(@JsonProperty("hostname") String hostname, @JsonProperty("type") String nodeType, - @JsonProperty("ipAddress") String ipAddress, + @JsonProperty("ipAddress") String ipAddress, @JsonProperty("ports") List<Integer> ports, @JsonProperty("trustedBy") String trustedBy) { this.hostname = hostname; this.nodeType = nodeType; this.ipAddress = ipAddress; + this.ports = ports == null ? List.of() : List.copyOf(ports); this.trustedBy = trustedBy; } diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java index 435dc9cae85..cb2134b36af 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainer.java @@ -55,8 +55,8 @@ public class AclMaintainer { if (context.isDisabled(NodeAgentTask.AclMaintainer)) return; // Apply acl to the filter table - editFlushOnError(context, IPVersion.IPv4, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv4, context.nodeType())); - editFlushOnError(context, IPVersion.IPv6, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv6, context.nodeType())); + editFlushOnError(context, IPVersion.IPv4, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv4)); + editFlushOnError(context, IPVersion.IPv6, "filter", FilterTableLineEditor.from(context.acl(), IPVersion.IPv6)); ipAddresses.getAddress(context.hostname().value(), IPVersion.IPv4).ifPresent(addr -> applyRedirect(context, addr)); ipAddresses.getAddress(context.hostname().value(), IPVersion.IPv6).ifPresent(addr -> applyRedirect(context, addr)); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditor.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditor.java index 82dc388568b..462790b8d0f 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditor.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditor.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.maintenance.acl; -import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl; import com.yahoo.vespa.hosted.node.admin.task.util.file.LineEdit; import com.yahoo.vespa.hosted.node.admin.task.util.file.LineEditor; @@ -23,8 +22,8 @@ class FilterTableLineEditor implements LineEditor { this.wantedRules = List.copyOf(wantedRules); } - static FilterTableLineEditor from(Acl acl, IPVersion ipVersion, NodeType nodeType) { - List<String> rules = acl.toRules(ipVersion, nodeType); + static FilterTableLineEditor from(Acl acl, IPVersion ipVersion) { + List<String> rules = acl.toRules(ipVersion); return new FilterTableLineEditor(rules); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java index c4bee8bb1dc..9fbe22482ea 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AclTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -19,17 +20,17 @@ public class AclTest { private static final Acl aclCommon = new Acl( Set.of(1234, 453), - testNodes("192.1.2.2", "fb00::1", "fe80::2", "fe80::3"), + testNodes(Set.of(), "192.1.2.2", "fb00::1", "fe80::2", "fe80::3"), Set.of()); private static final Acl aclWithoutPorts = new Acl( Set.of(), - testNodes("192.1.2.2", "fb00::1", "fe80::2"), + testNodes(Set.of(), "192.1.2.2", "fb00::1", "fe80::2"), Set.of()); @Test void no_trusted_ports() { - String listRulesIpv4 = String.join("\n", aclWithoutPorts.toRules(IPVersion.IPv4, NodeType.tenant)); + String listRulesIpv4 = String.join("\n", aclWithoutPorts.toRules(IPVersion.IPv4)); assertEquals( "-P INPUT ACCEPT\n" + "-P FORWARD ACCEPT\n" + @@ -44,7 +45,7 @@ public class AclTest { @Test void ipv4_rules() { - String listRulesIpv4 = String.join("\n", aclCommon.toRules(IPVersion.IPv4, NodeType.tenant)); + String listRulesIpv4 = String.join("\n", aclCommon.toRules(IPVersion.IPv4)); assertEquals( "-P INPUT ACCEPT\n" + "-P FORWARD ACCEPT\n" + @@ -52,7 +53,7 @@ public class AclTest { "-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT\n" + "-A INPUT -i lo -j ACCEPT\n" + "-A INPUT -p icmp -j ACCEPT\n" + - "-A INPUT -p tcp -m multiport --dports 1234,453 -j ACCEPT\n" + + "-A INPUT -p tcp -m multiport --dports 453,1234 -j ACCEPT\n" + "-A INPUT -s 192.1.2.2/32 -j ACCEPT\n" + "-A INPUT -j REJECT --reject-with icmp-port-unreachable", listRulesIpv4); @@ -60,7 +61,7 @@ public class AclTest { @Test void ipv6_rules() { - String listRulesIpv6 = String.join("\n", aclCommon.toRules(IPVersion.IPv6, NodeType.tenant)); + String listRulesIpv6 = String.join("\n", aclCommon.toRules(IPVersion.IPv6)); assertEquals( "-P INPUT ACCEPT\n" + "-P FORWARD ACCEPT\n" + @@ -68,7 +69,7 @@ public class AclTest { "-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT\n" + "-A INPUT -i lo -j ACCEPT\n" + "-A INPUT -p ipv6-icmp -j ACCEPT\n" + - "-A INPUT -p tcp -m multiport --dports 1234,453 -j ACCEPT\n" + + "-A INPUT -p tcp -m multiport --dports 453,1234 -j ACCEPT\n" + "-A INPUT -s fb00::1/128 -j ACCEPT\n" + "-A INPUT -s fe80::2/128 -j ACCEPT\n" + "-A INPUT -s fe80::3/128 -j ACCEPT\n" + @@ -79,17 +80,17 @@ public class AclTest { void ipv6_rules_stable_order() { Acl aclCommonDifferentOrder = new Acl( Set.of(453, 1234), - testNodes("fe80::2", "192.1.2.2", "fb00::1", "fe80::3"), + testNodes(Set.of(), "fe80::2", "192.1.2.2", "fb00::1", "fe80::3"), Set.of()); for (IPVersion ipVersion : IPVersion.values()) { - assertEquals(aclCommon.toRules(ipVersion, NodeType.tenant), aclCommonDifferentOrder.toRules(ipVersion, NodeType.tenant)); + assertEquals(aclCommon.toRules(ipVersion), aclCommonDifferentOrder.toRules(ipVersion)); } } @Test void trusted_networks() { - Acl acl = new Acl(Set.of(4080), testNodes("127.0.0.1"), Set.of("10.0.0.0/24", "2001:db8::/32")); + Acl acl = new Acl(Set.of(4080), testNodes(Set.of(), "127.0.0.1"), Set.of("10.0.0.0/24", "2001:db8::/32")); assertEquals("-P INPUT ACCEPT\n" + "-P FORWARD ACCEPT\n" + @@ -101,7 +102,7 @@ public class AclTest { "-A INPUT -s 127.0.0.1/32 -j ACCEPT\n" + "-A INPUT -s 10.0.0.0/24 -j ACCEPT\n" + "-A INPUT -j REJECT --reject-with icmp-port-unreachable", - String.join("\n", acl.toRules(IPVersion.IPv4, NodeType.tenant))); + String.join("\n", acl.toRules(IPVersion.IPv4))); assertEquals("-P INPUT ACCEPT\n" + "-P FORWARD ACCEPT\n" + @@ -112,12 +113,15 @@ public class AclTest { "-A INPUT -p tcp -m multiport --dports 4080 -j ACCEPT\n" + "-A INPUT -s 2001:db8::/32 -j ACCEPT\n" + "-A INPUT -j REJECT --reject-with icmp6-port-unreachable", - String.join("\n", acl.toRules(IPVersion.IPv6, NodeType.tenant))); + String.join("\n", acl.toRules(IPVersion.IPv6))); } @Test void config_server_acl() { - Acl acl = new Acl(Set.of(22, 4443), testNodes(NodeType.config, "172.17.0.41", "172.17.0.42", "172.17.0.43"), Set.of()); + Set<Acl.Node> testNodes = Stream.concat(testNodes(NodeType.config, Set.of(), "172.17.0.41", "172.17.0.42", "172.17.0.43").stream(), + testNodes(NodeType.tenant, Set.of(19070), "172.17.0.81", "172.17.0.82", "172.17.0.83").stream()) + .collect(Collectors.toSet()); + Acl acl = new Acl(Set.of(22, 4443), testNodes, Set.of()); assertEquals(""" -P INPUT ACCEPT -P FORWARD ACCEPT @@ -126,17 +130,20 @@ public class AclTest { -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -p tcp -m multiport --dports 22,4443 -j ACCEPT - -A INPUT -s 172.17.0.41/32 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 172.17.0.42/32 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 172.17.0.43/32 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -p tcp -m multiport --dports 2181,2182,2183 -j REJECT --reject-with icmp-port-unreachable -A INPUT -s 172.17.0.41/32 -j ACCEPT -A INPUT -s 172.17.0.42/32 -j ACCEPT -A INPUT -s 172.17.0.43/32 -j ACCEPT + -A INPUT -s 172.17.0.81/32 -p tcp -m multiport --dports 19070 -j ACCEPT + -A INPUT -s 172.17.0.82/32 -p tcp -m multiport --dports 19070 -j ACCEPT + -A INPUT -s 172.17.0.83/32 -p tcp -m multiport --dports 19070 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-port-unreachable""", - String.join("\n", acl.toRules(IPVersion.IPv4, NodeType.config))); + String.join("\n", acl.toRules(IPVersion.IPv4))); + + Set<Acl.Node> testNodes2 = Stream.concat(testNodes(NodeType.config, Set.of(), "2001:db8::41", "2001:db8::42", "2001:db8::43").stream(), + testNodes(NodeType.tenant, Set.of(19070), "2001:db8::81", "2001:db8::82", "2001:db8::83").stream()) + .collect(Collectors.toSet()); + Acl acl2 = new Acl(Set.of(22, 4443), testNodes2, Set.of()); - Acl acl2 = new Acl(Set.of(22, 4443), testNodes(NodeType.config, "2001:db8::41", "2001:db8::42", "2001:db8::43"), Set.of()); assertEquals(""" -P INPUT ACCEPT -P FORWARD ACCEPT @@ -145,24 +152,23 @@ public class AclTest { -A INPUT -i lo -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT -p tcp -m multiport --dports 22,4443 -j ACCEPT - -A INPUT -s 2001:db8::41/128 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 2001:db8::42/128 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 2001:db8::43/128 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -p tcp -m multiport --dports 2181,2182,2183 -j REJECT --reject-with icmp6-port-unreachable -A INPUT -s 2001:db8::41/128 -j ACCEPT -A INPUT -s 2001:db8::42/128 -j ACCEPT -A INPUT -s 2001:db8::43/128 -j ACCEPT + -A INPUT -s 2001:db8::81/128 -p tcp -m multiport --dports 19070 -j ACCEPT + -A INPUT -s 2001:db8::82/128 -p tcp -m multiport --dports 19070 -j ACCEPT + -A INPUT -s 2001:db8::83/128 -p tcp -m multiport --dports 19070 -j ACCEPT -A INPUT -j REJECT --reject-with icmp6-port-unreachable""", - String.join("\n", acl2.toRules(IPVersion.IPv6, NodeType.config))); + String.join("\n", acl2.toRules(IPVersion.IPv6))); } - private static Set<Acl.Node> testNodes(String... address) { - return testNodes(NodeType.tenant, address); + private static Set<Acl.Node> testNodes(Set<Integer> ports, String... address) { + return testNodes(NodeType.tenant, ports, address); } - private static Set<Acl.Node> testNodes(NodeType nodeType, String... address) { + private static Set<Acl.Node> testNodes(NodeType nodeType, Set<Integer> ports, String... address) { return Arrays.stream(address) - .map(addr -> new Acl.Node("hostname", nodeType, addr)) + .map(addr -> new Acl.Node("hostname", addr, ports)) .collect(Collectors.toUnmodifiableSet()); } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java index 9d5683c9856..827c6ebb6ec 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/AclMaintainerTest.java @@ -48,10 +48,10 @@ public class AclMaintainerTest { @Test void configures_full_container_acl_from_empty() { Acl acl = new Acl.Builder().withTrustedPorts(22, 4443) - .withTrustedNode("hostname1", "3001::abcd", NodeType.tenant) - .withTrustedNode("hostname2", "3001::1234", NodeType.tenant) - .withTrustedNode("hostname1", "192.168.0.5", NodeType.tenant) - .withTrustedNode("hostname4", "172.16.5.234", NodeType.tenant).build(); + .withTrustedNode("hostname1", "3001::abcd") + .withTrustedNode("hostname2", "3001::1234") + .withTrustedNode("hostname1", "192.168.0.5") + .withTrustedNode("hostname4", "172.16.5.234").build(); NodeAgentContext context = contextGenerator.apply(acl); ipAddresses.addAddress(context.hostname().value(), "2001::1"); @@ -163,7 +163,7 @@ public class AclMaintainerTest { @Test void only_configure_iptables_for_ipversion_that_differs() { - Acl acl = new Acl.Builder().withTrustedPorts(22, 4443).withTrustedNode("hostname1", "3001::abcd", NodeType.tenant).build(); + Acl acl = new Acl.Builder().withTrustedPorts(22, 4443).withTrustedNode("hostname1", "3001::abcd").build(); NodeAgentContext context = contextGenerator.apply(acl); ipAddresses.addAddress(context.hostname().value(), "2001::1"); @@ -209,7 +209,7 @@ public class AclMaintainerTest { @Test void rollback_is_attempted_when_applying_acl_fail() { - Acl acl = new Acl.Builder().withTrustedPorts(22, 4443).withTrustedNode("hostname1", "3001::abcd", NodeType.tenant).build(); + Acl acl = new Acl.Builder().withTrustedPorts(22, 4443).withTrustedNode("hostname1", "3001::abcd").build(); NodeAgentContext context = contextGenerator.apply(acl); ipAddresses.addAddress(context.hostname().value(), "2001::1"); @@ -248,12 +248,12 @@ public class AclMaintainerTest { @Test public void config_server_acl() { Acl acl = new Acl.Builder().withTrustedPorts(22, 4443) - .withTrustedNode("cfg1", "2001:db8::1", NodeType.config) - .withTrustedNode("cfg2", "2001:db8::2", NodeType.config) - .withTrustedNode("cfg3", "2001:db8::3", NodeType.config) - .withTrustedNode("cfg1", "172.17.0.41", NodeType.config) - .withTrustedNode("cfg2", "172.17.0.42", NodeType.config) - .withTrustedNode("cfg3", "172.17.0.43", NodeType.config) + .withTrustedNode("cfg1", "2001:db8::1") + .withTrustedNode("cfg2", "2001:db8::2") + .withTrustedNode("cfg3", "2001:db8::3") + .withTrustedNode("cfg1", "172.17.0.41") + .withTrustedNode("cfg2", "172.17.0.42") + .withTrustedNode("cfg3", "172.17.0.43") .build(); NodeAgentContext context = NodeAgentContextImpl.builder("cfg3.example.com") .fileSystem(fileSystem) @@ -287,10 +287,6 @@ public class AclMaintainerTest { -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -p tcp -m multiport --dports 22,4443 -j ACCEPT - -A INPUT -s 172.17.0.41/32 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 172.17.0.42/32 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 172.17.0.43/32 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -p tcp -m multiport --dports 2181,2182,2183 -j REJECT --reject-with icmp-port-unreachable -A INPUT -s 172.17.0.41/32 -j ACCEPT -A INPUT -s 172.17.0.42/32 -j ACCEPT -A INPUT -s 172.17.0.43/32 -j ACCEPT @@ -307,10 +303,6 @@ public class AclMaintainerTest { -A INPUT -i lo -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT -p tcp -m multiport --dports 22,4443 -j ACCEPT - -A INPUT -s 2001:db8::1/128 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 2001:db8::2/128 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -s 2001:db8::3/128 -p tcp -m multiport --dports 2181,2182,2183 -j ACCEPT - -A INPUT -p tcp -m multiport --dports 2181,2182,2183 -j REJECT --reject-with icmp6-port-unreachable -A INPUT -s 2001:db8::1/128 -j ACCEPT -A INPUT -s 2001:db8::2/128 -j ACCEPT -A INPUT -s 2001:db8::3/128 -j ACCEPT diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditorTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditorTest.java index 39d1a46f198..9263a1a8dd1 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditorTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/acl/FilterTableLineEditorTest.java @@ -19,7 +19,7 @@ public class FilterTableLineEditorTest { @Test void filter_set_wanted_rules() { - Acl acl = new Acl.Builder().withTrustedPorts(22).withTrustedNode("hostname", "3001::1", NodeType.tenant).build(); + Acl acl = new Acl.Builder().withTrustedPorts(22).withTrustedNode("hostname", "3001::1").build(); assertFilterTableLineEditorResult( acl, IPVersion.IPv6, @@ -60,7 +60,7 @@ public class FilterTableLineEditorTest { private static void assertFilterTableLineEditorResult( Acl acl, IPVersion ipVersion, String currentFilterTable, String expectedRestoreFileContent) { - FilterTableLineEditor filterLineEditor = FilterTableLineEditor.from(acl, ipVersion, NodeType.tenant); + FilterTableLineEditor filterLineEditor = FilterTableLineEditor.from(acl, ipVersion); Editor editor = new Editor( "nat-table", () -> List.of(currentFilterTable.split("\n")), @@ -72,16 +72,17 @@ public class FilterTableLineEditorTest { private static void assertFilterTableDiff(List<Integer> currentIpSuffix, List<Integer> wantedIpSuffix, String diff) { Acl.Builder currentAcl = new Acl.Builder(); NodeType nodeType = NodeType.tenant; - currentIpSuffix.forEach(i -> currentAcl.withTrustedNode("host" + i, "2001::" + i, nodeType)); + currentIpSuffix.forEach(i -> currentAcl.withTrustedNode("host" + i, "2001::" + i)); List<String> currentTable = new ArrayList<>(); Acl.Builder wantedAcl = new Acl.Builder(); - wantedIpSuffix.forEach(i -> wantedAcl.withTrustedNode("host" + i, "2001::" + i, nodeType)); + wantedIpSuffix.forEach(i -> wantedAcl.withTrustedNode("host" + i, "2001::" + i)); - new Editor("table", List::of, currentTable::addAll, FilterTableLineEditor.from(currentAcl.build(), IPVersion.IPv6, nodeType)) + new Editor("table", List::of, currentTable::addAll, FilterTableLineEditor.from(currentAcl.build(), IPVersion.IPv6)) .edit(log -> {}); - new Editor("table", () -> currentTable, result -> {}, FilterTableLineEditor.from(wantedAcl.build(), IPVersion.IPv6, nodeType)) + new Editor("table", () -> currentTable, result -> {}, FilterTableLineEditor.from(wantedAcl.build(), IPVersion.IPv6)) .edit(log -> assertEquals(diff, log)); } + } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java index c2d4506a28c..14fa2e1c8ff 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/History.java @@ -40,7 +40,7 @@ public class History { .stream() .sorted(Comparator.comparing(Event::at)) .skip(Math.max(log.size() - maxLogSize, 0)) - .collect(Collectors.toUnmodifiableList()); + .toList(); this.maxLogSize = maxLogSize; } @@ -53,7 +53,7 @@ public class History { /** Returns the age of this node as best as we can determine: The time since the first event registered for it */ public Duration age(Instant now) { - Instant oldestEventTime = events.values().stream().map(event -> event.at()).sorted().findFirst().orElse(now); + Instant oldestEventTime = events.values().stream().map(Event::at).sorted().findFirst().orElse(now); return Duration.between(oldestEventTime, now); } @@ -117,19 +117,18 @@ public class History { public History recordStateTransition(Node.State from, Node.State to, Agent agent, Instant at) { // If the event is a re-reservation, allow the new one to override the older one. if (from == to && from != Node.State.reserved) return this; - switch (to) { - case provisioned: return this.with(new Event(Event.Type.provisioned, agent, at)); - case deprovisioned: return this.with(new Event(Event.Type.deprovisioned, agent, at)); - case ready: return this.withoutApplicationEvents().with(new Event(Event.Type.readied, agent, at)); - case active: return this.with(new Event(Event.Type.activated, agent, at)); - case inactive: return this.with(new Event(Event.Type.deactivated, agent, at)); - case reserved: return this.with(new Event(Event.Type.reserved, agent, at)); - case failed: return this.with(new Event(Event.Type.failed, agent, at)); - case dirty: return this.with(new Event(Event.Type.deallocated, agent, at)); - case parked: return this.with(new Event(Event.Type.parked, agent, at)); - case breakfixed: return this.with(new Event(Event.Type.breakfixed, agent, at)); - default: return this; - } + return switch (to) { + case provisioned -> this.with(new Event(Event.Type.provisioned, agent, at)); + case deprovisioned -> this.with(new Event(Event.Type.deprovisioned, agent, at)); + case ready -> this.withoutApplicationEvents().with(new Event(Event.Type.readied, agent, at)); + case active -> this.with(new Event(Event.Type.activated, agent, at)); + case inactive -> this.with(new Event(Event.Type.deactivated, agent, at)); + case reserved -> this.with(new Event(Event.Type.reserved, agent, at)); + case failed -> this.with(new Event(Event.Type.failed, agent, at)); + case dirty -> this.with(new Event(Event.Type.deallocated, agent, at)); + case parked -> this.with(new Event(Event.Type.parked, agent, at)); + case breakfixed -> this.with(new Event(Event.Type.breakfixed, agent, at)); + }; } /** @@ -154,17 +153,7 @@ public class History { } /** An event which may happen to a node */ - public static class Event { - - private final Instant at; - private final Agent agent; - private final Type type; - - public Event(Event.Type type, Agent agent, Instant at) { - this.type = type; - this.agent = agent; - this.at = at; - } + public record Event(Type type, Agent agent, Instant at) { public enum Type { // State changes @@ -213,7 +202,7 @@ public class History { this.applicationLevel = applicationLevel; } - /** Returns true if this is an application level event and false it it is a node level event */ + /** Returns true if this is an application-level event and false if it's a node-level event */ public boolean isApplicationLevel() { return applicationLevel; } } @@ -229,19 +218,6 @@ public class History { @Override public String toString() { return "'" + type + "' event at " + at + " by " + agent; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Event event = (Event) o; - return at.equals(event.at) && agent == event.agent && type == event.type; - } - - @Override - public int hashCode() { - return Objects.hash(at, agent, type); - } - } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java index afee9a55870..43843f6fe5a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringOsUpgrader.java @@ -78,7 +78,9 @@ public class RetiringOsUpgrader implements OsUpgrader { /** The duration this leaves new nodes alone before scheduling any upgrade */ private Duration gracePeriod() { - return nodeRepository.zone().system().isCd() ? Duration.ofDays(1) : Duration.ofDays(30); + if (nodeRepository.zone().system().isCd()) return Duration.ofDays(1); + if (!nodeRepository.zone().environment().isProduction()) return Duration.ofDays(7); + return Duration.ofDays(30); } } diff --git a/persistence/src/Doxyfile b/persistence/src/Doxyfile deleted file mode 100644 index 0ae14d0acc1..00000000000 --- a/persistence/src/Doxyfile +++ /dev/null @@ -1,994 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.2.18 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Storage - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../doc - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these class will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower case letters. If set to YES upper case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are adviced to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explict @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# reimplements. - -INHERIT_DOCS = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consist of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = storage - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl - -FILE_PATTERNS = *.h *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet - -HTML_STYLESHEET = ../cpp/vespa_link.css - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output dir. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non empty doxygen will try to run -# the html help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the Html help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, -# or Internet explorer 4.0+). Note that for large projects the tree generation -# can take a very long time. In such cases it is better to disable this feature. -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimised for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assigments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_XML = NO - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tagfiles. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superceded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yield more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermedate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO - -# The CGI_NAME tag should be the name of the CGI script that -# starts the search engine (doxysearch) with the correct parameters. -# A script with this name will be generated by doxygen. - -CGI_NAME = search.cgi - -# The CGI_URL tag should be the absolute URL to the directory where the -# cgi binaries are located. See the documentation of your http daemon for -# details. - -CGI_URL = - -# The DOC_URL tag should be the absolute URL to the directory where the -# documentation is located. If left blank the absolute path to the -# documentation, with file:// prepended to it, will be used. - -DOC_URL = - -# The DOC_ABSPATH tag should be the absolute path to the directory where the -# documentation is located. If left blank the directory on the local machine -# will be used. - -DOC_ABSPATH = - -# The BIN_ABSPATH tag must point to the directory where the doxysearch binary -# is installed. - -BIN_ABSPATH = /usr/local/bin/ - -# The EXT_DOC_PATHS tag can be used to specify one or more paths to -# documentation generated for other projects. This allows doxysearch to search -# the documentation for these projects as well. - -EXT_DOC_PATHS = diff --git a/searchcore/src/tests/proton/summaryengine/summaryengine.cpp b/searchcore/src/tests/proton/summaryengine/summaryengine.cpp index f82b4c9243f..f1183c2556a 100644 --- a/searchcore/src/tests/proton/summaryengine/summaryengine.cpp +++ b/searchcore/src/tests/proton/summaryengine/summaryengine.cpp @@ -3,13 +3,9 @@ #include <vespa/vespalib/data/slime/slime.h> #include <vespa/searchcore/proton/summaryengine/summaryengine.h> #include <vespa/searchlib/engine/searchreply.h> -#include <vespa/searchlib/util/rawbuf.h> -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> #include <vespa/vespalib/data/databuffer.h> #include <vespa/vespalib/data/simple_buffer.h> #include <vespa/vespalib/util/compressor.h> -#include <vespa/searchsummary/docsummary/docsumwriter.h> -#include <vespa/metrics/metricset.h> #include <vespa/fnet/frt/rpcrequest.h> #include <vespa/log/log.h> diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp index 7b4db47f585..cb541c2836d 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp @@ -103,7 +103,7 @@ DocsumContext::createSlimeReply() DocsumContext::DocsumContext(const DocsumRequest & request, IDocsumWriter & docsumWriter, IDocsumStore & docsumStore, std::shared_ptr<Matcher> matcher, ISearchContext & searchCtx, IAttributeContext & attrCtx, - IAttributeManager & attrMgr, SessionManager & sessionMgr) : + const IAttributeManager & attrMgr, SessionManager & sessionMgr) : _request(request), _docsumWriter(docsumWriter), _docsumStore(docsumStore), @@ -124,24 +124,24 @@ DocsumContext::getDocsums() } void -DocsumContext::FillSummaryFeatures(search::docsummary::GetDocsumsState * state, search::docsummary::IDocsumEnvironment *) +DocsumContext::FillSummaryFeatures(search::docsummary::GetDocsumsState& state) { - assert(&_docsumState == state); + assert(&_docsumState == &state); if (_matcher->canProduceSummaryFeatures()) { - state->_summaryFeatures = _matcher->getSummaryFeatures(_request, _searchCtx, _attrCtx, _sessionMgr); + state._summaryFeatures = _matcher->getSummaryFeatures(_request, _searchCtx, _attrCtx, _sessionMgr); } - state->_summaryFeaturesCached = false; + state._summaryFeaturesCached = false; } void -DocsumContext::FillRankFeatures(search::docsummary::GetDocsumsState * state, search::docsummary::IDocsumEnvironment *) +DocsumContext::FillRankFeatures(search::docsummary::GetDocsumsState& state) { - assert(&_docsumState == state); + assert(&_docsumState == &state); // check if we are allowed to run - if ( ! state->_args.dumpFeatures()) { + if ( ! state._args.dumpFeatures()) { return; } - state->_rankFeatures = _matcher->getRankFeatures(_request, _searchCtx, _attrCtx, _sessionMgr); + state._rankFeatures = _matcher->getRankFeatures(_request, _searchCtx, _attrCtx, _sessionMgr); } std::unique_ptr<MatchingElements> diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h index 958e19f9bed..5c1db91f05d 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h +++ b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h @@ -27,7 +27,7 @@ private: std::shared_ptr<matching::Matcher> _matcher; matching::ISearchContext & _searchCtx; search::attribute::IAttributeContext & _attrCtx; - search::IAttributeManager & _attrMgr; + const search::IAttributeManager & _attrMgr; search::docsummary::GetDocsumsState _docsumState; matching::SessionManager & _sessionMgr; @@ -43,14 +43,14 @@ public: std::shared_ptr<matching::Matcher> matcher, matching::ISearchContext & searchCtx, search::attribute::IAttributeContext & attrCtx, - search::IAttributeManager & attrMgr, + const search::IAttributeManager & attrMgr, matching::SessionManager & sessionMgr); search::engine::DocsumReply::UP getDocsums(); // Implements GetDocsumsStateCallback - void FillSummaryFeatures(search::docsummary::GetDocsumsState * state, search::docsummary::IDocsumEnvironment * env) override; - void FillRankFeatures(search::docsummary::GetDocsumsState * state, search::docsummary::IDocsumEnvironment * env) override; + void FillSummaryFeatures(search::docsummary::GetDocsumsState& state) override; + void FillRankFeatures(search::docsummary::GetDocsumsState& state) override; std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::MatchingElementsFields &fields) override; }; diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/isummarymanager.h b/searchcore/src/vespa/searchcore/proton/docsummary/isummarymanager.h index e3c4705104f..946c45feb4b 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/isummarymanager.h +++ b/searchcore/src/vespa/searchcore/proton/docsummary/isummarymanager.h @@ -31,16 +31,11 @@ public: typedef std::unique_ptr<ISummarySetup> UP; typedef std::shared_ptr<ISummarySetup> SP; - virtual ~ISummarySetup() {} + ~ISummarySetup() override = default; virtual search::docsummary::IDocsumWriter &getDocsumWriter() const = 0; virtual const search::docsummary::ResultConfig &getResultConfig() = 0; virtual search::docsummary::IDocsumStore::UP createDocsumStore() = 0; - - // Inherit doc from IDocsumEnvironment - virtual search::IAttributeManager *getAttributeManager() override = 0; - virtual vespalib::string lookupIndex(const vespalib::string & s) const override = 0; - virtual juniper::Juniper *getJuniper() override = 0; }; typedef std::unique_ptr<ISummaryManager> UP; diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp index 18c84038f9b..3e3a3529e46 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp +++ b/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.cpp @@ -10,6 +10,7 @@ #include <vespa/searchcore/proton/flushengine/shrink_lid_space_flush_target.h> #include <vespa/vespalib/util/lambdatask.h> #include <vespa/searchsummary/docsummary/docsumconfig.h> +#include <vespa/searchsummary/docsummary/keywordextractor.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/fastlib/text/normwordfolder.h> @@ -89,7 +90,7 @@ SummarySetup(const vespalib::string & baseDir, const SummaryConfig & summaryCfg, _juniperConfig(), _attributeMgr(std::move(attributeMgr)), _docStore(std::move(docStore)), - _repo(repo) + _repo(std::move(repo)) { auto resultConfig = std::make_unique<ResultConfig>(); if (!resultConfig->ReadConfig(summaryCfg, make_string("SummaryManager(%s)", baseDir.c_str()).c_str())) { @@ -103,7 +104,7 @@ SummarySetup(const vespalib::string & baseDir, const SummaryConfig & summaryCfg, _juniperConfig = std::make_unique<juniper::Juniper>(&_juniperProps, _wordFolder.get()); _docsumWriter = std::make_unique<DynamicDocsumWriter>(std::move(resultConfig), std::unique_ptr<KeywordExtractor>()); - DynamicDocsumConfig dynCfg(this, _docsumWriter.get()); + DynamicDocsumConfig dynCfg(*this, _docsumWriter.get()); dynCfg.configure(summarymapCfg); } diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.h b/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.h index 0fd45bb28fb..44874e69b31 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.h +++ b/searchcore/src/vespa/searchcore/proton/docsummary/summarymanager.h @@ -43,7 +43,7 @@ public: search::docsummary::IDocsumStore::UP createDocsumStore() override; - search::IAttributeManager * getAttributeManager() override { return _attributeMgr.get(); } + const search::IAttributeManager * getAttributeManager() const override { return _attributeMgr.get(); } vespalib::string lookupIndex(const vespalib::string & s) const override { (void) s; return ""; } juniper::Juniper * getJuniper() override { return _juniperConfig.get(); } }; diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_master.cpp b/searchcore/src/vespa/searchcore/proton/matching/match_master.cpp index 427d4507c43..eefb8411df2 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/match_master.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/match_master.cpp @@ -24,6 +24,21 @@ using vespalib::Issue; namespace { +struct LazyThreadTraceInserter { + search::engine::Trace &root_trace; + std::unique_ptr<vespalib::slime::Inserter> inserter; + LazyThreadTraceInserter(search::engine::Trace &root_trace_in) + : root_trace(root_trace_in), inserter() {} + void handle(const search::engine::Trace &thread_trace) { + if (thread_trace.hasTrace()) { + if (!inserter) { + inserter = std::make_unique<vespalib::slime::ArrayInserter>(root_trace.createCursor("query_execution").setArray("threads")); + } + vespalib::slime::inject(thread_trace.getRoot(), *inserter); + } + } +}; + struct TimedMatchLoopCommunicator final : IMatchLoopCommunicator { IMatchLoopCommunicator &communicator; vespalib::Timer timer; @@ -104,17 +119,12 @@ MatchMaster::match(search::engine::Trace & trace, double query_time_s = vespalib::to_s(query_latency_time.elapsed()); double rerank_time_s = vespalib::to_s(timedCommunicator.elapsed); double match_time_s = 0.0; - std::unique_ptr<vespalib::slime::Inserter> inserter; - if (trace.shouldTrace(4)) { - inserter = std::make_unique<vespalib::slime::ArrayInserter>(trace.createCursor("query_execution").setArray("threads")); - } + LazyThreadTraceInserter inserter(trace); for (size_t i = 0; i < threadState.size(); ++i) { const MatchThread & matchThread = *threadState[i]; match_time_s = std::max(match_time_s, matchThread.get_match_time()); _stats.merge_partition(matchThread.get_thread_stats(), i); - if (inserter && matchThread.getTrace().hasTrace()) { - vespalib::slime::inject(matchThread.getTrace().getRoot(), *inserter); - } + inserter.handle(matchThread.getTrace()); matchThread.get_issues().for_each_message([](const auto &msg){ Issue::report(Issue(msg)); }); } _stats.queryLatency(query_time_s); diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp b/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp index a2af40aae96..a086a719d95 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp @@ -187,8 +187,8 @@ MatchToolsFactory(QueryLimiter & queryLimiter, _query.setWhiteListBlueprint(metaStore.createWhiteListBlueprint()); trace.addEvent(5, "Deserialize and build query tree"); _valid = _query.buildTree(queryStack, location, viewResolver, indexEnv, - rankSetup.split_unpacking_iterators(), - rankSetup.delay_unpacking_iterators()); + SplitUnpackingIterators::check(_queryEnv.getProperties(), rankSetup.split_unpacking_iterators()), + DelayUnpackingIterators::check(_queryEnv.getProperties(), rankSetup.delay_unpacking_iterators())); if (_valid) { _query.extractTerms(_queryEnv.terms()); _query.extractLocations(_queryEnv.locations()); diff --git a/searchlib/CMakeLists.txt b/searchlib/CMakeLists.txt index f9b6271b47b..f39018846a0 100644 --- a/searchlib/CMakeLists.txt +++ b/searchlib/CMakeLists.txt @@ -186,7 +186,6 @@ vespa_define_module( src/tests/nearsearch src/tests/postinglistbm src/tests/predicate - src/tests/prettyfloat src/tests/query src/tests/queryeval src/tests/queryeval/blueprint diff --git a/searchlib/src/Doxyfile b/searchlib/src/Doxyfile deleted file mode 100644 index 96544cd14d5..00000000000 --- a/searchlib/src/Doxyfile +++ /dev/null @@ -1,1162 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.3.9.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = SearchLib - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of source -# files, where putting all generated files in the same directory would otherwise -# cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = searchlib - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = IAM_DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/searchlib/src/tests/attribute/searchcontextelementiterator/searchcontextelementiterator_test.cpp b/searchlib/src/tests/attribute/searchcontextelementiterator/searchcontextelementiterator_test.cpp index 06ca299b9ba..3029f2c01a5 100644 --- a/searchlib/src/tests/attribute/searchcontextelementiterator/searchcontextelementiterator_test.cpp +++ b/searchlib/src/tests/attribute/searchcontextelementiterator/searchcontextelementiterator_test.cpp @@ -120,7 +120,7 @@ TEST(ElementIteratorTest, require_that_non_searchcontext) fef::TermFieldMatchDataArray tfmda; tfmda.add(&tfmd); queryeval::FakeResult result = createResult(); - auto search = std::make_unique<queryeval::FakeSearch>("","","", result, tfmda); + auto search = std::make_unique<queryeval::FakeSearch>("","","", result, std::move(tfmda)); queryeval::ElementIteratorWrapper wrapper(std::move(search), tfmd); verifyElementIterator(wrapper); } diff --git a/searchlib/src/tests/prettyfloat/.gitignore b/searchlib/src/tests/prettyfloat/.gitignore deleted file mode 100644 index bf0327f3372..00000000000 --- a/searchlib/src/tests/prettyfloat/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.depend -Makefile -prettyfloat_test -searchlib_prettyfloat_test_app diff --git a/searchlib/src/tests/prettyfloat/CMakeLists.txt b/searchlib/src/tests/prettyfloat/CMakeLists.txt deleted file mode 100644 index 907b7661800..00000000000 --- a/searchlib/src/tests/prettyfloat/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -vespa_add_executable(searchlib_prettyfloat_test_app TEST - SOURCES - prettyfloat.cpp - DEPENDS - searchlib -) -vespa_add_test(NAME searchlib_prettyfloat_test_app COMMAND searchlib_prettyfloat_test_app) diff --git a/searchlib/src/tests/prettyfloat/prettyfloat.cpp b/searchlib/src/tests/prettyfloat/prettyfloat.cpp deleted file mode 100644 index a84ac59c964..00000000000 --- a/searchlib/src/tests/prettyfloat/prettyfloat.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/log/log.h> -LOG_SETUP("prettyfloat_test"); -#include <vespa/vespalib/testkit/testapp.h> -#include <vespa/searchlib/util/rawbuf.h> -#include <vespa/searchlib/common/hitrank.h> - -using namespace search; - -TEST_SETUP(Test); - -int -Test::Main() -{ - TEST_INIT("prettyfloat_test"); - { - RawBuf buf(5000); - SignedHitRank rank = 10; - buf.addSignedHitRank(rank); - *buf.GetWritableFillPos() = '\0'; - EXPECT_EQUAL(std::string("10"), buf.GetDrainPos()); - } - { - RawBuf buf(5000); - HitRank rank = 10; - buf.addHitRank(rank); - *buf.GetWritableFillPos() = '\0'; - EXPECT_EQUAL(std::string("10"), buf.GetDrainPos()); - } - TEST_DONE(); -} diff --git a/searchlib/src/tests/util/rawbuf_test.cpp b/searchlib/src/tests/util/rawbuf_test.cpp index fd77b5b4ddb..663dde3ef45 100644 --- a/searchlib/src/tests/util/rawbuf_test.cpp +++ b/searchlib/src/tests/util/rawbuf_test.cpp @@ -1,10 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -// Unit tests for rawbuf. #include <vespa/searchlib/util/rawbuf.h> #include <vespa/vespalib/stllike/string.h> #include <vespa/vespalib/testkit/testapp.h> -#include <vespa/fastos/file.h> #include <vespa/log/log.h> LOG_SETUP("rawbuf_test"); @@ -18,40 +16,6 @@ string getString(const RawBuf &buf) { return string(buf.GetDrainPos(), buf.GetUsedLen()); } -TEST("require that rawbuf can append text") { - RawBuf buf(10); - buf += "foo"; - buf += "bar"; - EXPECT_EQUAL("foobar", getString(buf)); -} - -TEST("require that rawbuf expands when appended beyond size") { - RawBuf buf(4); - buf += "foo"; - EXPECT_EQUAL(1u, buf.GetFreeLen()); - buf += "bar"; - EXPECT_EQUAL(2u, buf.GetFreeLen()); - EXPECT_EQUAL("foobar", getString(buf)); -} - -TEST("require that a rawbuf can be appended to another") { - RawBuf buf1(10); - RawBuf buf2(10); - buf1 += "foo"; - buf2 += "bar"; - buf1 += buf2; - EXPECT_EQUAL("foobar", getString(buf1)); -} - -TEST("require that rawbufs can be tested for equality") { - RawBuf buf1(10); - RawBuf buf2(10); - buf1 += "foo"; - buf2 += "bar"; - EXPECT_TRUE(buf1 == buf1); - EXPECT_FALSE(buf1 == buf2); -} - template <typename T> void checkAddNum(void (RawBuf::*addNum)(T, size_t, char), size_t num, size_t fieldw, char fill, const string &expected) { @@ -79,18 +43,6 @@ TEST("require that rawbuf can add numbers in decimal") { checkAddNum(&RawBuf::addNum64, -1, 4, '0', "00-1"); } -TEST("require that rawbuf can add hitrank") { - RawBuf buf(10); - buf.addHitRank(HitRank(4.2)); - EXPECT_EQUAL("4.2", getString(buf)); -} - -TEST("require that rawbuf can add signedhitrank") { - RawBuf buf(10); - buf.addHitRank(SignedHitRank(-4.213)); - EXPECT_EQUAL("-4.213", getString(buf)); -} - TEST("require that rawbuf can append data of known length") { RawBuf buf(10); const string data("foo bar baz qux quux"); @@ -98,50 +50,15 @@ TEST("require that rawbuf can append data of known length") { EXPECT_EQUAL(data, getString(buf)); } -TEST("require that rawbuf can be truncated shorter and longer") { - RawBuf buf(10); - buf += "foobarbaz"; - buf.truncate(3); - buf += "qux"; - buf.truncate(9); - EXPECT_EQUAL("fooquxbaz", getString(buf)); -} - TEST("require that prealloc makes enough room") { RawBuf buf(10); - buf += "foo"; + buf.append("foo"); EXPECT_EQUAL(7u, buf.GetFreeLen()); buf.preAlloc(100); EXPECT_EQUAL("foo", getString(buf)); EXPECT_LESS_EQUAL(100u, buf.GetFreeLen()); } -TEST("require that rawbuf can read from file") { - FastOS_File file("mytemporaryfile"); - ASSERT_TRUE(file.OpenReadWrite()); - ASSERT_EQUAL(6, file.Write2("barbaz", 6)); - file.SetPosition(0); - - RawBuf buf(10); - buf += "foo"; - buf.readFile(file, 3); - EXPECT_EQUAL("foobar", getString(buf)); - buf.readFile(file, 100); - EXPECT_EQUAL("foobarbaz", getString(buf)); - - ASSERT_TRUE(file.Close()); - file.Delete(); -} - -TEST("require that compact discards drained data") { - RawBuf buf(10); - buf += "foobar"; - buf.Drain(3); - buf.Compact(); - buf.Fill(3); - EXPECT_EQUAL("barbar", getString(buf)); -} - TEST("require that reusing a buffer that has grown 4x will alloc new buffer") { RawBuf buf(10); buf.preAlloc(100); @@ -152,7 +69,7 @@ TEST("require that reusing a buffer that has grown 4x will alloc new buffer") { TEST("require that various length and position information can be found.") { RawBuf buf(30); - buf += "foo bar baz qux quux corge"; + buf.append("foo bar baz qux quux corge"); buf.Drain(7); EXPECT_EQUAL(7u, buf.GetDrainLen()); EXPECT_EQUAL(19u, buf.GetUsedLen()); @@ -160,14 +77,6 @@ TEST("require that various length and position information can be found.") { EXPECT_EQUAL(4u, buf.GetFreeLen()); } -TEST("require that rawbuf can 'putToInet' 16-bit numbers") { - RawBuf buf(1); - buf.Put16ToInet(0x1234); - EXPECT_EQUAL(2, buf.GetFillPos() - buf.GetDrainPos()); - EXPECT_EQUAL(0x12, (int) buf.GetDrainPos()[0] & 0xff); - EXPECT_EQUAL(0x34, (int) buf.GetDrainPos()[1] & 0xff); -} - TEST("require that rawbuf can 'putToInet' 32-bit numbers") { RawBuf buf(1); buf.PutToInet(0x12345678); diff --git a/searchlib/src/vespa/searchlib/attribute/attributememorysavetarget.h b/searchlib/src/vespa/searchlib/attribute/attributememorysavetarget.h index b32c8fc1663..58aba882e8d 100644 --- a/searchlib/src/vespa/searchlib/attribute/attributememorysavetarget.h +++ b/searchlib/src/vespa/searchlib/attribute/attributememorysavetarget.h @@ -5,7 +5,6 @@ #include "attributememoryfilewriter.h" #include "iattributesavetarget.h" #include <vespa/searchlib/common/tunefileinfo.h> -#include <vespa/searchlib/util/rawbuf.h> #include <vespa/vespalib/stllike/hash_fun.h> #include <memory> #include <unordered_map> @@ -37,7 +36,7 @@ private: public: AttributeMemorySaveTarget(); - ~AttributeMemorySaveTarget(); + ~AttributeMemorySaveTarget() override; /** * Write the underlying buffer(s) to file(s). diff --git a/searchlib/src/vespa/searchlib/common/hitrank.h b/searchlib/src/vespa/searchlib/common/hitrank.h index 652d431193b..092855878c2 100644 --- a/searchlib/src/vespa/searchlib/common/hitrank.h +++ b/searchlib/src/vespa/searchlib/common/hitrank.h @@ -7,7 +7,6 @@ namespace search { typedef double HitRank; -typedef double SignedHitRank; constexpr HitRank default_rank_value = -HUGE_VAL; constexpr HitRank zero_rank_value = 0.0; diff --git a/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.cpp b/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.cpp index 0d0478b2ddc..b67a8409581 100644 --- a/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.cpp +++ b/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.cpp @@ -20,13 +20,13 @@ ZcRareWordPosOccIterator(Position start, uint64_t bitLength, uint32_t docIdLimit bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features, const PosOccFieldsParams *fieldsParams, - const TermFieldMatchDataArray &matchData) - : ZcRareWordPostingIterator<bigEndian, dynamic_k>(matchData, start, docIdLimit, + TermFieldMatchDataArray matchData) + : ZcRareWordPostingIterator<bigEndian, dynamic_k>(std::move(matchData), start, docIdLimit, decode_normal_features, decode_interleaved_features, unpack_normal_features, unpack_interleaved_features), _decodeContextReal(start.getOccurences(), start.getBitOffset(), bitLength, fieldsParams) { - assert(!matchData.valid() || (fieldsParams->getNumFields() == matchData.size())); + assert(!this->_matchData.valid() || (fieldsParams->getNumFields() == this->_matchData.size())); _decodeContext = &_decodeContextReal; } @@ -37,19 +37,21 @@ ZcPosOccIterator(Position start, uint64_t bitLength, uint32_t docIdLimit, bool unpack_normal_features, bool unpack_interleaved_features, uint32_t minChunkDocs, const PostingListCounts &counts, const PosOccFieldsParams *fieldsParams, - const TermFieldMatchDataArray &matchData) - : ZcPostingIterator<bigEndian>(minChunkDocs, dynamic_k, counts, matchData, start, docIdLimit, + TermFieldMatchDataArray matchData) + : ZcPostingIterator<bigEndian>(minChunkDocs, dynamic_k, counts, std::move(matchData), start, docIdLimit, decode_normal_features, decode_interleaved_features, unpack_normal_features, unpack_interleaved_features), _decodeContextReal(start.getOccurences(), start.getBitOffset(), bitLength, fieldsParams) { - assert(!matchData.valid() || (fieldsParams->getNumFields() == matchData.size())); + assert(!this->_matchData.valid() || (fieldsParams->getNumFields() == this->_matchData.size())); _decodeContext = &_decodeContextReal; } template <bool bigEndian> std::unique_ptr<search::queryeval::SearchIterator> -create_zc_posocc_iterator(const PostingListCounts &counts, bitcompression::Position start, uint64_t bit_length, const Zc4PostingParams &posting_params, const bitcompression::PosOccFieldsParams &fields_params, const fef::TermFieldMatchDataArray &match_data, bool unpack_normal_features, bool unpack_interleaved_features) +create_zc_posocc_iterator(const PostingListCounts &counts, bitcompression::Position start, uint64_t bit_length, + const Zc4PostingParams &posting_params, const bitcompression::PosOccFieldsParams &fields_params, + fef::TermFieldMatchDataArray match_data, bool unpack_normal_features, bool unpack_interleaved_features) { using EC = bitcompression::EncodeContext64<bigEndian>; bitcompression::DecodeContext64<bigEndian> d(start.getOccurences(), start.getBitOffset()); @@ -61,28 +63,38 @@ create_zc_posocc_iterator(const PostingListCounts &counts, bitcompression::Posit assert((num_docs == counts._numDocs) || ((num_docs == posting_params._min_chunk_docs) && (num_docs < counts._numDocs))); if (num_docs < posting_params._min_skip_docs) { if (posting_params._dynamic_k) { - return std::make_unique<ZcRareWordPosOccIterator<bigEndian, true>>(start, bit_length, posting_params._doc_id_limit, posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, unpack_interleaved_features, &fields_params, match_data); + return std::make_unique<ZcRareWordPosOccIterator<bigEndian, true>>(start, bit_length, posting_params._doc_id_limit, + posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, + unpack_interleaved_features, &fields_params, std::move(match_data)); } else { - return std::make_unique<ZcRareWordPosOccIterator<bigEndian, false>>(start, bit_length, posting_params._doc_id_limit, posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, unpack_interleaved_features, &fields_params, match_data); + return std::make_unique<ZcRareWordPosOccIterator<bigEndian, false>>(start, bit_length, posting_params._doc_id_limit, + posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, + unpack_interleaved_features, &fields_params, std::move(match_data)); } } else { if (posting_params._dynamic_k) { - return std::make_unique<ZcPosOccIterator<bigEndian, true>>(start, bit_length, posting_params._doc_id_limit, posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, unpack_interleaved_features, posting_params._min_chunk_docs, counts, &fields_params, match_data); + return std::make_unique<ZcPosOccIterator<bigEndian, true>>(start, bit_length, posting_params._doc_id_limit, + posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, + unpack_interleaved_features, posting_params._min_chunk_docs, counts, &fields_params, std::move(match_data)); } else { - return std::make_unique<ZcPosOccIterator<bigEndian, false>>(start, bit_length, posting_params._doc_id_limit, posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, unpack_interleaved_features, posting_params._min_chunk_docs, counts, &fields_params, match_data); + return std::make_unique<ZcPosOccIterator<bigEndian, false>>(start, bit_length, posting_params._doc_id_limit, + posting_params._encode_features, posting_params._encode_interleaved_features, unpack_normal_features, + unpack_interleaved_features, posting_params._min_chunk_docs, counts, &fields_params, std::move(match_data)); } } } std::unique_ptr<search::queryeval::SearchIterator> -create_zc_posocc_iterator(bool bigEndian, const PostingListCounts &counts, bitcompression::Position start, uint64_t bit_length, const Zc4PostingParams &posting_params, const bitcompression::PosOccFieldsParams &fields_params, const fef::TermFieldMatchDataArray &match_data) +create_zc_posocc_iterator(bool bigEndian, const PostingListCounts &counts, bitcompression::Position start, uint64_t bit_length, + const Zc4PostingParams &posting_params, const bitcompression::PosOccFieldsParams &fields_params, + fef::TermFieldMatchDataArray match_data) { bool unpack_normal_features = match_data.valid() ? match_data[0]->needs_normal_features() : false; bool unpack_interleaved_features = match_data.valid() ? match_data[0]->needs_interleaved_features() : false; if (bigEndian) { - return create_zc_posocc_iterator<true>(counts, start, bit_length, posting_params, fields_params, match_data, unpack_normal_features, unpack_interleaved_features); + return create_zc_posocc_iterator<true>(counts, start, bit_length, posting_params, fields_params, std::move(match_data), unpack_normal_features, unpack_interleaved_features); } else { - return create_zc_posocc_iterator<false>(counts, start, bit_length, posting_params, fields_params, match_data, unpack_normal_features, unpack_interleaved_features); + return create_zc_posocc_iterator<false>(counts, start, bit_length, posting_params, fields_params, std::move(match_data), unpack_normal_features, unpack_interleaved_features); } } diff --git a/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.h b/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.h index fdc54245c1d..7e60c2df112 100644 --- a/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.h +++ b/searchlib/src/vespa/searchlib/diskindex/zcposocciterators.h @@ -23,7 +23,7 @@ public: bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features, const bitcompression::PosOccFieldsParams *fieldsParams, - const fef::TermFieldMatchDataArray &matchData); + fef::TermFieldMatchDataArray matchData); }; @@ -42,11 +42,11 @@ public: bool unpack_normal_features, bool unpack_interleaved_features, uint32_t minChunkDocs, const index::PostingListCounts &counts, const bitcompression::PosOccFieldsParams *fieldsParams, - const fef::TermFieldMatchDataArray &matchData); + fef::TermFieldMatchDataArray matchData); }; std::unique_ptr<search::queryeval::SearchIterator> -create_zc_posocc_iterator(bool bigEndian, const index::PostingListCounts &counts, bitcompression::Position start, uint64_t bit_length, const Zc4PostingParams &posting_params, const bitcompression::PosOccFieldsParams &fields_params, const fef::TermFieldMatchDataArray &match_data); +create_zc_posocc_iterator(bool bigEndian, const index::PostingListCounts &counts, bitcompression::Position start, uint64_t bit_length, const Zc4PostingParams &posting_params, const bitcompression::PosOccFieldsParams &fields_params, fef::TermFieldMatchDataArray match_data); extern template class ZcRareWordPosOccIterator<false, false>; extern template class ZcRareWordPosOccIterator<false, true>; diff --git a/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.cpp b/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.cpp index c7cd9d476a6..6af0ebb6199 100644 --- a/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.cpp +++ b/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.cpp @@ -16,8 +16,8 @@ using queryeval::RankedSearchIteratorBase; #define DEBUG_ZCPOSTING_PRINTF 0 #define DEBUG_ZCPOSTING_ASSERT 0 -ZcIteratorBase::ZcIteratorBase(const TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit) : - RankedSearchIteratorBase(matchData), +ZcIteratorBase::ZcIteratorBase(TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit) : + RankedSearchIteratorBase(std::move(matchData)), _docIdLimit(docIdLimit), _start(start) { } @@ -37,10 +37,10 @@ ZcIteratorBase::initRange(uint32_t beginid, uint32_t endid) template <bool bigEndian> ZcRareWordPostingIteratorBase<bigEndian>:: -ZcRareWordPostingIteratorBase(const TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit, +ZcRareWordPostingIteratorBase(TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features) - : ZcIteratorBase(matchData, start, docIdLimit), + : ZcIteratorBase(std::move(matchData), start, docIdLimit), _decodeContext(nullptr), _residue(0), _prevDocId(0), @@ -56,10 +56,10 @@ ZcRareWordPostingIteratorBase(const TermFieldMatchDataArray &matchData, Position template <bool bigEndian, bool dynamic_k> ZcRareWordPostingIterator<bigEndian, dynamic_k>:: -ZcRareWordPostingIterator(const TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit, +ZcRareWordPostingIterator(TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features) - : ZcRareWordPostingIteratorBase<bigEndian>(matchData, start, docIdLimit, + : ZcRareWordPostingIteratorBase<bigEndian>(std::move(matchData), start, docIdLimit, decode_normal_features, decode_interleaved_features, unpack_normal_features, unpack_interleaved_features), _doc_id_k_param() @@ -187,10 +187,10 @@ ZcRareWordPostingIterator<bigEndian, dynamic_k>::readWordStart(uint32_t docIdLim clearUnpacked(); } -ZcPostingIteratorBase::ZcPostingIteratorBase(const TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit, +ZcPostingIteratorBase::ZcPostingIteratorBase(TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features) - : ZcIteratorBase(matchData, start, docIdLimit), + : ZcIteratorBase(std::move(matchData), start, docIdLimit), _valI(nullptr), _valIBase(nullptr), _featureSeekPos(0), @@ -216,11 +216,11 @@ ZcPostingIterator<bigEndian>:: ZcPostingIterator(uint32_t minChunkDocs, bool dynamicK, const PostingListCounts &counts, - const search::fef::TermFieldMatchDataArray &matchData, + search::fef::TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features) - : ZcPostingIteratorBase(matchData, start, docIdLimit, + : ZcPostingIteratorBase(std::move(matchData), start, docIdLimit, decode_normal_features, decode_interleaved_features, unpack_normal_features, unpack_interleaved_features), _decodeContext(nullptr), diff --git a/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.h b/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.h index 07467e28229..36375a25d2b 100644 --- a/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.h +++ b/searchlib/src/vespa/searchlib/diskindex/zcpostingiterators.h @@ -43,7 +43,7 @@ do { \ class ZcIteratorBase : public queryeval::RankedSearchIteratorBase { protected: - ZcIteratorBase(const fef::TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit); + ZcIteratorBase(fef::TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit); virtual void readWordStart(uint32_t docIdLimit) = 0; virtual void rewind(Position start) = 0; void initRange(uint32_t beginid, uint32_t endid) override; @@ -74,7 +74,7 @@ public: uint32_t _field_length; uint32_t _num_occs; - ZcRareWordPostingIteratorBase(const fef::TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit, + ZcRareWordPostingIteratorBase(fef::TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features); @@ -127,7 +127,7 @@ class ZcRareWordPostingIterator : public ZcRareWordPostingIteratorBase<bigEndian ZcPostingDocIdKParam<dynamic_k> _doc_id_k_param; public: using ParentClass::_decodeContext; - ZcRareWordPostingIterator(const fef::TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit, + ZcRareWordPostingIterator(fef::TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features); void doSeek(uint32_t docId) override; @@ -299,7 +299,7 @@ protected: VESPA_DLL_LOCAL void doL1SkipSeek(uint32_t docId); void doSeek(uint32_t docId) override; public: - ZcPostingIteratorBase(const fef::TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit, + ZcPostingIteratorBase(fef::TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features); }; @@ -328,7 +328,7 @@ public: const PostingListCounts &_counts; ZcPostingIterator(uint32_t minChunkDocs, bool dynamicK, const PostingListCounts &counts, - const search::fef::TermFieldMatchDataArray &matchData, Position start, uint32_t docIdLimit, + search::fef::TermFieldMatchDataArray matchData, Position start, uint32_t docIdLimit, bool decode_normal_features, bool decode_interleaved_features, bool unpack_normal_features, bool unpack_interleaved_features); diff --git a/searchlib/src/vespa/searchlib/engine/proto_rpc_adapter.cpp b/searchlib/src/vespa/searchlib/engine/proto_rpc_adapter.cpp index bc97e57d0b3..1a868bcb57a 100644 --- a/searchlib/src/vespa/searchlib/engine/proto_rpc_adapter.cpp +++ b/searchlib/src/vespa/searchlib/engine/proto_rpc_adapter.cpp @@ -8,7 +8,6 @@ #include <vespa/fnet/frt/rpcrequest.h> #include <vespa/fnet/frt/supervisor.h> #include <vespa/vespalib/util/compressor.h> -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> #include <vespa/vespalib/data/databuffer.h> #include <vespa/searchlib/common/packets.h> diff --git a/searchlib/src/vespa/searchlib/fef/CMakeLists.txt b/searchlib/src/vespa/searchlib/fef/CMakeLists.txt index ba4430ff8e6..398cc0518f8 100644 --- a/searchlib/src/vespa/searchlib/fef/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/fef/CMakeLists.txt @@ -36,6 +36,7 @@ vespa_add_library(searchlib_fef OBJECT table.cpp tablemanager.cpp termfieldmatchdata.cpp + termfieldmatchdataarray.cpp termfieldmatchdataposition.cpp termmatchdatamerger.cpp utils.cpp diff --git a/searchlib/src/vespa/searchlib/fef/Doxyfile b/searchlib/src/vespa/searchlib/fef/Doxyfile deleted file mode 100644 index 4ca1f146280..00000000000 --- a/searchlib/src/vespa/searchlib/fef/Doxyfile +++ /dev/null @@ -1,1162 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.3.9.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "Feature Execution Framework" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of source -# files, where putting all generated files in the same directory would otherwise -# cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = IAM_DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp index 168f5e4369f..ec2d02c2460 100644 --- a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp +++ b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp @@ -318,11 +318,15 @@ namespace matching { const vespalib::string SplitUnpackingIterators::NAME("vespa.matching.split_unpacking_iterators"); const bool SplitUnpackingIterators::DEFAULT_VALUE(false); -bool SplitUnpackingIterators::check(const Properties &props) { return lookupBool(props, NAME, DEFAULT_VALUE); } +bool SplitUnpackingIterators::check(const Properties &props, bool fallback) { + return lookupBool(props, NAME, fallback); +} const vespalib::string DelayUnpackingIterators::NAME("vespa.matching.delay_unpacking_iterators"); const bool DelayUnpackingIterators::DEFAULT_VALUE(false); -bool DelayUnpackingIterators::check(const Properties &props) { return lookupBool(props, NAME, DEFAULT_VALUE); } +bool DelayUnpackingIterators::check(const Properties &props, bool fallback) { + return lookupBool(props, NAME, fallback); +} const vespalib::string TermwiseLimit::NAME("vespa.matching.termwise_limit"); const double TermwiseLimit::DEFAULT_VALUE(1.0); diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.h b/searchlib/src/vespa/searchlib/fef/indexproperties.h index ce3798a6c8e..f8cb51683d5 100644 --- a/searchlib/src/vespa/searchlib/fef/indexproperties.h +++ b/searchlib/src/vespa/searchlib/fef/indexproperties.h @@ -237,7 +237,8 @@ namespace matching { struct SplitUnpackingIterators { static const vespalib::string NAME; static const bool DEFAULT_VALUE; - static bool check(const Properties &props); + static bool check(const Properties &props) { return check(props, DEFAULT_VALUE); } + static bool check(const Properties &props, bool fallback); }; /** @@ -248,7 +249,8 @@ namespace matching { struct DelayUnpackingIterators { static const vespalib::string NAME; static const bool DEFAULT_VALUE; - static bool check(const Properties &props); + static bool check(const Properties &props) { return check(props, DEFAULT_VALUE); } + static bool check(const Properties &props, bool fallback); }; /** diff --git a/searchlib/src/vespa/searchlib/fef/termfieldmatchdataarray.cpp b/searchlib/src/vespa/searchlib/fef/termfieldmatchdataarray.cpp new file mode 100644 index 00000000000..87a25a87a80 --- /dev/null +++ b/searchlib/src/vespa/searchlib/fef/termfieldmatchdataarray.cpp @@ -0,0 +1,9 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "termfieldmatchdataarray.h" + +namespace search::fef { + +TermFieldMatchDataArray::~TermFieldMatchDataArray() = default; + +} diff --git a/searchlib/src/vespa/searchlib/fef/termfieldmatchdataarray.h b/searchlib/src/vespa/searchlib/fef/termfieldmatchdataarray.h index 13a78a445e8..3c1b76ad40e 100644 --- a/searchlib/src/vespa/searchlib/fef/termfieldmatchdataarray.h +++ b/searchlib/src/vespa/searchlib/fef/termfieldmatchdataarray.h @@ -23,6 +23,12 @@ private: std::vector<TermFieldMatchData *> _array; public: + TermFieldMatchDataArray() = default; + TermFieldMatchDataArray(TermFieldMatchDataArray &&) noexcept = default; + TermFieldMatchDataArray & operator = (TermFieldMatchDataArray &&) noexcept = default; + TermFieldMatchDataArray(const TermFieldMatchDataArray&) = default; + TermFieldMatchDataArray & operator = (const TermFieldMatchDataArray &) = delete; + ~TermFieldMatchDataArray(); /** * Reserve space for a number of elements in order to reduce number of allocations. * @param size Number of elements to reserve space for. @@ -37,7 +43,7 @@ public: * @param value the pointer to be added **/ TermFieldMatchDataArray &add(TermFieldMatchData *value) { - assert(value != 0); + assert(value != nullptr); _array.push_back(value); return *this; } diff --git a/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.cpp b/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.cpp index 6b9c5a31c97..d1906f53514 100644 --- a/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.cpp +++ b/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.cpp @@ -6,9 +6,9 @@ namespace search::fef { TermMatchDataMerger::TermMatchDataMerger(const Inputs &allinputs, - const TermFieldMatchDataArray &outputs) + TermFieldMatchDataArray outputs) : _inputs(), - _output(outputs), + _output(std::move(outputs)), _scratch() { for (size_t i = 0; i < _output.size(); ++i) { diff --git a/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.h b/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.h index 576dfc9a22c..fd015a7d304 100644 --- a/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.h +++ b/searchlib/src/vespa/searchlib/fef/termmatchdatamerger.h @@ -31,7 +31,7 @@ public: TermMatchDataMerger(const TermMatchDataMerger &) = delete; TermMatchDataMerger &operator=(const TermMatchDataMerger &) = delete; - TermMatchDataMerger(const Inputs &allinputs, const TermFieldMatchDataArray &outputs); + TermMatchDataMerger(const Inputs &allinputs, TermFieldMatchDataArray outputs); ~TermMatchDataMerger(); void merge(uint32_t docid); diff --git a/searchlib/src/vespa/searchlib/index/docbuilder.cpp b/searchlib/src/vespa/searchlib/index/docbuilder.cpp index d4bf9e86c74..bf0a6866a1a 100644 --- a/searchlib/src/vespa/searchlib/index/docbuilder.cpp +++ b/searchlib/src/vespa/searchlib/index/docbuilder.cpp @@ -111,21 +111,6 @@ insertRaw(const Schema::Field & sfield, rfvalue->setValue(static_cast<const char *>(buf), len); } - -template <typename T> -std::unique_ptr<T> -make_UP(T *p) -{ - return std::unique_ptr<T>(p); -} - -template <typename T> -std::unique_ptr<T> -makeUP(T *p) -{ - return std::unique_ptr<T>(p); -} - } namespace docbuilderkludge @@ -154,10 +139,10 @@ using namespace docbuilderkludge; namespace { -std::unique_ptr<Annotation> +Annotation makeTokenType(linguistics::TokenType type) { - return std::make_unique<Annotation>(*AnnotationType::TOKEN_TYPE, std::make_unique<IntFieldValue>(type)); + return Annotation(*AnnotationType::TOKEN_TYPE, std::make_unique<IntFieldValue>(type)); } } @@ -337,7 +322,7 @@ DocBuilder::IndexFieldHandle::addTokenizedString(const vespalib::string &val, void DocBuilder::IndexFieldHandle::addSpan(size_t start, size_t len) { - const SpanNode &span = _spanList->add(makeUP(new Span(start, len))); + const SpanNode &span = _spanList->add(std::make_unique<Span>(start, len)); _lastSpan = &span; } @@ -388,8 +373,8 @@ DocBuilder::IndexFieldHandle::addTermAnnotation(const vespalib::string &val) assert(_spanTree); assert(_lastSpan != nullptr); _spanTree->annotate(*_lastSpan, - makeUP(new Annotation(*AnnotationType::TERM, - makeUP(new StringFieldValue(val))))); + Annotation(*AnnotationType::TERM, + std::make_unique<StringFieldValue>(val))); } void diff --git a/searchlib/src/vespa/searchlib/index/postinglisthandle.cpp b/searchlib/src/vespa/searchlib/index/postinglisthandle.cpp index ba1dcb9c87a..714331bc161 100644 --- a/searchlib/src/vespa/searchlib/index/postinglisthandle.cpp +++ b/searchlib/src/vespa/searchlib/index/postinglisthandle.cpp @@ -10,7 +10,6 @@ PostingListHandle::createIterator(const PostingListCounts &counts, const search::fef::TermFieldMatchDataArray &matchData, bool useBitVector) const { - (void) useBitVector; return _file->createIterator(counts, *this, matchData, useBitVector); } diff --git a/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp b/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp index 59289bfbf8f..ddf58d7b9f1 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/field_index.cpp @@ -215,10 +215,10 @@ template <bool interleaved_features> queryeval::SearchIterator::UP FieldIndex<interleaved_features>::make_search_iterator(const vespalib::string& term, uint32_t field_id, - const fef::TermFieldMatchDataArray& match_data) const + fef::TermFieldMatchDataArray match_data) const { return search::memoryindex::make_search_iterator<interleaved_features> - (find(term), getFeatureStore(), field_id, match_data); + (find(term), getFeatureStore(), field_id, std::move(match_data)); } namespace { diff --git a/searchlib/src/vespa/searchlib/memoryindex/field_index.h b/searchlib/src/vespa/searchlib/memoryindex/field_index.h index 988b7d723f1..9f9f4124100 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/field_index.h +++ b/searchlib/src/vespa/searchlib/memoryindex/field_index.h @@ -100,7 +100,7 @@ public: */ queryeval::SearchIterator::UP make_search_iterator(const vespalib::string& term, uint32_t field_id, - const fef::TermFieldMatchDataArray& match_data) const; + fef::TermFieldMatchDataArray match_data) const; std::unique_ptr<queryeval::SimpleLeafBlueprint> make_term_blueprint(const vespalib::string& term, const queryeval::FieldSpecBase& field, diff --git a/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp b/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp index 2b4c1a024d9..48fc6873390 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.cpp @@ -33,7 +33,7 @@ public: PostingIteratorBase(PostingListIteratorType itr, const FeatureStore& feature_store, uint32_t field_id, - const fef::TermFieldMatchDataArray& match_data); + fef::TermFieldMatchDataArray match_data); ~PostingIteratorBase(); void doSeek(uint32_t docId) override; @@ -45,8 +45,8 @@ template <bool interleaved_features> PostingIteratorBase<interleaved_features>::PostingIteratorBase(PostingListIteratorType itr, const FeatureStore& feature_store, uint32_t field_id, - const fef::TermFieldMatchDataArray& match_data) : - queryeval::RankedSearchIteratorBase(match_data), + fef::TermFieldMatchDataArray match_data) : + queryeval::RankedSearchIteratorBase(std::move(match_data)), _itr(itr), _feature_store(feature_store), _feature_decoder(nullptr) @@ -141,25 +141,25 @@ queryeval::SearchIterator::UP make_search_iterator(typename FieldIndex<interleaved_features>::PostingList::ConstIterator itr, const FeatureStore& feature_store, uint32_t field_id, - const fef::TermFieldMatchDataArray& match_data) + fef::TermFieldMatchDataArray match_data) { assert(match_data.size() == 1); auto* tfmd = match_data[0]; if (tfmd->needs_normal_features()) { if (tfmd->needs_interleaved_features()) { return std::make_unique<PostingIterator<interleaved_features, true, true>> - (itr, feature_store, field_id, match_data); + (itr, feature_store, field_id, std::move(match_data)); } else { return std::make_unique<PostingIterator<interleaved_features, true, false>> - (itr, feature_store, field_id, match_data); + (itr, feature_store, field_id, std::move(match_data)); } } else { if (tfmd->needs_interleaved_features()) { return std::make_unique<PostingIterator<interleaved_features, false, true>> - (itr, feature_store, field_id, match_data); + (itr, feature_store, field_id, std::move(match_data)); } else { return std::make_unique<PostingIterator<interleaved_features, false, false>> - (itr, feature_store, field_id, match_data); + (itr, feature_store, field_id, std::move(match_data)); } } } @@ -169,14 +169,14 @@ queryeval::SearchIterator::UP make_search_iterator<false>(typename FieldIndex<false>::PostingList::ConstIterator, const FeatureStore&, uint32_t, - const fef::TermFieldMatchDataArray&); + fef::TermFieldMatchDataArray); template queryeval::SearchIterator::UP make_search_iterator<true>(typename FieldIndex<true>::PostingList::ConstIterator, const FeatureStore&, uint32_t, - const fef::TermFieldMatchDataArray&); + fef::TermFieldMatchDataArray); template class PostingIteratorBase<false>; template class PostingIteratorBase<true>; diff --git a/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.h b/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.h index ea513b1dced..790f8bb3db7 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.h +++ b/searchlib/src/vespa/searchlib/memoryindex/posting_iterator.h @@ -22,7 +22,7 @@ queryeval::SearchIterator::UP make_search_iterator(typename FieldIndex<interleaved_features>::PostingList::ConstIterator itr, const FeatureStore& feature_store, uint32_t field_id, - const fef::TermFieldMatchDataArray& match_data); + fef::TermFieldMatchDataArray match_data); } diff --git a/searchlib/src/vespa/searchlib/parsequery/parse.h b/searchlib/src/vespa/searchlib/parsequery/parse.h index c3b5fcc81fa..1285125d34b 100644 --- a/searchlib/src/vespa/searchlib/parsequery/parse.h +++ b/searchlib/src/vespa/searchlib/parsequery/parse.h @@ -3,7 +3,6 @@ #pragma once #include <vespa/searchlib/query/weight.h> -#include <vespa/searchlib/util/rawbuf.h> #include <vespa/vespalib/stllike/string.h> namespace search { diff --git a/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp b/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp index 5ed33ec18a1..9bb62e76c49 100644 --- a/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp +++ b/searchlib/src/vespa/searchlib/query/tree/stackdumpcreator.cpp @@ -8,6 +8,7 @@ #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/util/size_literals.h> #include <vespa/searchlib/parsequery/parse.h> +#include <vespa/searchlib/util/rawbuf.h> using vespalib::string; using std::vector; diff --git a/searchlib/src/vespa/searchlib/queryeval/blueprint.h b/searchlib/src/vespa/searchlib/queryeval/blueprint.h index 4d7460452f2..5dca5c9412b 100644 --- a/searchlib/src/vespa/searchlib/queryeval/blueprint.h +++ b/searchlib/src/vespa/searchlib/queryeval/blueprint.h @@ -362,8 +362,7 @@ public: void freeze() override final; SearchIteratorUP createSearch(fef::MatchData &md, bool strict) const override; - virtual SearchIteratorUP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, - bool strict) const = 0; + virtual SearchIteratorUP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool strict) const = 0; }; // for leaf nodes representing a single term diff --git a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h index 9ad2e4dc92d..5955c359003 100644 --- a/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h +++ b/searchlib/src/vespa/searchlib/queryeval/dot_product_blueprint.h @@ -21,7 +21,7 @@ class DotProductBlueprint : public ComplexLeafBlueprint public: DotProductBlueprint(const FieldSpec &field); - ~DotProductBlueprint(); + ~DotProductBlueprint() override; // used by create visitor FieldSpec getNextChildField(const FieldSpec &outer); diff --git a/searchlib/src/vespa/searchlib/queryeval/fake_search.h b/searchlib/src/vespa/searchlib/queryeval/fake_search.h index d8cd31fba4c..5cd04f80499 100644 --- a/searchlib/src/vespa/searchlib/queryeval/fake_search.h +++ b/searchlib/src/vespa/searchlib/queryeval/fake_search.h @@ -29,9 +29,9 @@ public: const vespalib::string &field, const vespalib::string &term, const FakeResult &res, - const fef::TermFieldMatchDataArray &tfmda) + fef::TermFieldMatchDataArray tfmda) : _tag(tag), _field(field), _term(term), - _result(res), _offset(0), _tfmda(tfmda), + _result(res), _offset(0), _tfmda(std::move(tfmda)), _ctx(nullptr) { assert(_tfmda.size() == 1); diff --git a/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h b/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h index 5aa5db081ab..52992a52103 100644 --- a/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h +++ b/searchlib/src/vespa/searchlib/queryeval/irequestcontext.h @@ -17,7 +17,7 @@ namespace search::queryeval { class IRequestContext { public: - virtual ~IRequestContext() { } + virtual ~IRequestContext() = default; /** * Provides the time of soft doom for the query. Now it is time to start cleaning up and return what you have. diff --git a/searchlib/src/vespa/searchlib/queryeval/iterators.cpp b/searchlib/src/vespa/searchlib/queryeval/iterators.cpp index f3d12cd34a6..07beebac695 100644 --- a/searchlib/src/vespa/searchlib/queryeval/iterators.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/iterators.cpp @@ -5,9 +5,9 @@ namespace search::queryeval { RankedSearchIteratorBase:: -RankedSearchIteratorBase(const fef::TermFieldMatchDataArray &matchData) +RankedSearchIteratorBase(fef::TermFieldMatchDataArray matchData) : SearchIterator(), - _matchData(matchData), + _matchData(std::move(matchData)), _needUnpack(1) { } diff --git a/searchlib/src/vespa/searchlib/queryeval/iterators.h b/searchlib/src/vespa/searchlib/queryeval/iterators.h index ead00437471..e4f75184924 100644 --- a/searchlib/src/vespa/searchlib/queryeval/iterators.h +++ b/searchlib/src/vespa/searchlib/queryeval/iterators.h @@ -21,7 +21,7 @@ protected: uint32_t getNeedUnpack() const { return _needUnpack; } void incNeedUnpack() { ++_needUnpack; } public: - RankedSearchIteratorBase(const fef::TermFieldMatchDataArray &matchData); + RankedSearchIteratorBase(fef::TermFieldMatchDataArray matchData); ~RankedSearchIteratorBase() override; bool getUnpacked() const { return _needUnpack == 0; } }; diff --git a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h index 7a1d8f3d253..2f97d89e322 100644 --- a/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h +++ b/searchlib/src/vespa/searchlib/queryeval/leaf_blueprints.h @@ -44,7 +44,7 @@ protected: createLeafSearch(const search::fef::TermFieldMatchDataArray &tfmda, bool strict) const override; public: SimpleBlueprint(const SimpleResult &result); - ~SimpleBlueprint(); + ~SimpleBlueprint() override; SimpleBlueprint &tag(const vespalib::string &tag); const vespalib::string &tag() const { return _tag; } SearchIterator::UP createFilterSearch(bool strict, FilterConstraint constraint) const override; @@ -67,7 +67,7 @@ protected: public: FakeBlueprint(const FieldSpec &field, const FakeResult &result); - ~FakeBlueprint(); + ~FakeBlueprint() override; FakeBlueprint &tag(const vespalib::string &t) { _tag = t; diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp index 0025fd5fe03..a3f3234af27 100644 --- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.cpp @@ -75,13 +75,14 @@ SimplePhraseBlueprint::createLeafSearch(const fef::TermFieldMatchDataArray &tfmd order_map.insert(std::make_pair(childState.estimate().estHits, i)); } std::vector<uint32_t> eval_order; + eval_order.reserve(order_map.size()); for (const auto & child : order_map) { eval_order.push_back(child.second); } auto phrase = std::make_unique<SimplePhraseSearch>(std::move(children), - std::move(md), childMatch, - eval_order, *tfmda[0], strict); + std::move(md), std::move(childMatch), + std::move(eval_order), *tfmda[0], strict); phrase->setDoom(& _doom); return phrase; } diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h index 10cdac34f19..e7a0d112ca5 100644 --- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h +++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_blueprint.h @@ -25,7 +25,7 @@ private: public: SimplePhraseBlueprint(const FieldSpec &field, const IRequestContext & requestContext, bool expensive); - ~SimplePhraseBlueprint(); + ~SimplePhraseBlueprint() override; // used by create visitor FieldSpec getNextChildField(const FieldSpec &outer); diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp index f58f888393b..0d4940037b2 100644 --- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.cpp @@ -159,12 +159,12 @@ SimplePhraseSearch::phraseSeek(uint32_t doc_id) { SimplePhraseSearch::SimplePhraseSearch(Children children, fef::MatchData::UP md, - const fef::TermFieldMatchDataArray &childMatch, + fef::TermFieldMatchDataArray childMatch, vector<uint32_t> eval_order, TermFieldMatchData &tmd, bool strict) : AndSearch(std::move(children)), _md(std::move(md)), - _childMatch(childMatch), + _childMatch(std::move(childMatch)), _eval_order(std::move(eval_order)), _tmd(tmd), _doom(nullptr), diff --git a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h index 7b9d7c9365f..f1f722caf98 100644 --- a/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h +++ b/searchlib/src/vespa/searchlib/queryeval/simple_phrase_search.h @@ -45,7 +45,7 @@ public: **/ SimplePhraseSearch(Children children, fef::MatchData::UP md, - const fef::TermFieldMatchDataArray &childMatch, + fef::TermFieldMatchDataArray childMatch, std::vector<uint32_t> eval_order, fef::TermFieldMatchData &tmd, bool strict); void doSeek(uint32_t doc_id) override; diff --git a/searchlib/src/vespa/searchlib/util/rawbuf.cpp b/searchlib/src/vespa/searchlib/util/rawbuf.cpp index d3cc9996c34..2ce9d52b2ce 100644 --- a/searchlib/src/vespa/searchlib/util/rawbuf.cpp +++ b/searchlib/src/vespa/searchlib/util/rawbuf.cpp @@ -2,14 +2,12 @@ #include "rawbuf.h" #include <vespa/vespalib/util/compress.h> -#include <vespa/fastos/file.h> #include <cassert> #include <cstring> +#include <cstdlib> namespace search { -static inline size_t smin(size_t a, size_t b) { return (a < b) ? a : b; } - RawBuf::RawBuf(size_t size) : _bufStart(nullptr), _bufEnd(nullptr), @@ -25,21 +23,6 @@ RawBuf::RawBuf(size_t size) _bufDrainPos = _bufFillPos = _bufStart; } - -RawBuf::RawBuf(char *start, size_t size) - : _bufStart(nullptr), - _bufEnd(nullptr), - _bufFillPos(nullptr), - _bufDrainPos(nullptr), - _initialBufStart(start), - _initialSize(size) -{ - _bufStart = start; - _bufEnd = _bufStart + size; - _bufDrainPos = _bufFillPos = _bufStart; -} - - RawBuf::~RawBuf() { if (_bufStart != _initialBufStart) @@ -109,17 +92,6 @@ RawBuf::appendCompressedNumber(int64_t n) _bufFillPos += vespalib::compress::Integer::compress(n, _bufFillPos); } - -/** - * Has the entire contents of the buffer been used up, i.e. freed? - */ -bool -RawBuf::IsEmpty() -{ - return _bufFillPos == _bufDrainPos; -} - - /** * Free 'len' bytes from the start of the contents. (These * have presumably been written or read.) @@ -158,19 +130,6 @@ RawBuf::preAlloc(size_t len) assert(static_cast<size_t>(_bufEnd -_bufFillPos) >= len); } - -void -RawBuf::Compact() -{ - if (_bufDrainPos == _bufStart) - return; - if (_bufFillPos != _bufDrainPos) - memmove(_bufStart, _bufDrainPos, _bufFillPos - _bufDrainPos); - _bufFillPos -= (_bufDrainPos - _bufStart); - _bufDrainPos = _bufStart; -} - - void RawBuf::Reuse() { @@ -191,7 +150,7 @@ RawBuf::Reuse() void -RawBuf::operator+=(const char *src) +RawBuf::append(const char *src) { while (*src) { char *cachedBufFillPos = _bufFillPos; @@ -204,37 +163,6 @@ RawBuf::operator+=(const char *src) } } - -void -RawBuf::operator+=(const RawBuf& buffer) -{ - size_t nbytes = buffer.GetUsedLen(); - if (nbytes == 0) - return; - - while (GetFreeLen() < nbytes) - expandBuf(nbytes); - memcpy(_bufFillPos, buffer._bufDrainPos, nbytes); - _bufFillPos += nbytes; -} - - -bool -RawBuf::operator==(const RawBuf &buffer) const -{ - size_t nbytes = buffer.GetUsedLen(); - if (nbytes != GetUsedLen()) - return false; - - const char *p, *t; - for (p=_bufDrainPos, t=buffer._bufDrainPos; p<_bufFillPos; p++, t++) { - if (*p != *t) - return false; - } - - return true; -} - /** * Append the value of param 'num' to the buffer, as a decimal * number right adjusted in a field of width 'fieldw', remaining @@ -327,37 +255,6 @@ RawBuf::addNum64(int64_t num, size_t fieldw, char fill) _bufFillPos = cachedBufFillPos; } - -void -RawBuf::addHitRank(HitRank num) -{ - char buf1[100]; - snprintf(buf1, sizeof(buf1), "%g", static_cast<double>(num)); - append(buf1, strlen(buf1)); -} - - -void -RawBuf::addSignedHitRank(SignedHitRank num) -{ - char buf1[100]; - snprintf(buf1, sizeof(buf1), "%g", static_cast<double>(num)); - append(buf1, strlen(buf1)); -} - -/** - * Read from the indicated file into the buffer, no more that the - * given number of bytes and no more than will fit in the buffer. - */ -size_t -RawBuf::readFile(FastOS_FileInterface &file, size_t maxlen) -{ - size_t got = file.Read(_bufFillPos, smin((_bufEnd - _bufFillPos), maxlen)); - if (got > 0) - _bufFillPos += got; - return got; -} - void RawBuf::ensureSizeInternal(size_t size) { expandBuf(size); diff --git a/searchlib/src/vespa/searchlib/util/rawbuf.h b/searchlib/src/vespa/searchlib/util/rawbuf.h index e69c13e13b3..a79e35be6c7 100644 --- a/searchlib/src/vespa/searchlib/util/rawbuf.h +++ b/searchlib/src/vespa/searchlib/util/rawbuf.h @@ -2,11 +2,8 @@ #pragma once -#include <vespa/searchlib/common/hitrank.h> #include <cstdint> -#include <sys/types.h> - -class FastOS_FileInterface; +#include <cstddef> namespace search { /** @@ -19,9 +16,6 @@ namespace search { class RawBuf { private: - RawBuf(const RawBuf &); - RawBuf& operator=(const RawBuf &); - char* _bufStart; // ref. to start of buffer (don't move this!) char* _bufEnd; // ref. to byte after last in buffer (don't mo) char* _bufFillPos; // ref. to byte where next should be put in @@ -30,41 +24,48 @@ private: size_t _initialSize; void ensureSizeInternal(size_t size); + void expandBuf(size_t needlen); + /** + * Convert unsigned int.s 'src', to interNet highendian order, at 'dst' + * or _bufFillPos. Update or return ref to next char after those filled in. + */ + static unsigned char* ToInet(uint32_t src, unsigned char* dst) { + *(dst + 3) = src; // The least significant 8 bits + src >>= 8; // of 'src' are stored. + *(dst + 2) = src; + src >>= 8; + *(dst + 1) = src; + src >>= 8; + *dst = src; + return dst + 4; + }; + static unsigned char* ToInet(uint64_t src, unsigned char* dst) { + ToInet(static_cast<uint32_t>(src >> 32), dst); + ToInet(static_cast<uint32_t>(src & 0xffffffffull), dst + 4); + return dst + 8; + }; public: - - RawBuf(char *start, size_t size);// Initially use provided buffer - RawBuf(size_t size); // malloc-s given size, assigns to _bufStart + RawBuf(const RawBuf &) = delete; + RawBuf& operator=(const RawBuf &) = delete; + explicit RawBuf(size_t size); // malloc-s given size, assigns to _bufStart ~RawBuf(); // Frees _bufStart, i.e. the char[]. - void operator+=(const char *src); - void operator+=(const RawBuf& buffer); - bool operator==(const RawBuf &buffer) const; void addNum(size_t num, size_t fieldw, char fill); void addNum32(int32_t num, size_t fieldw, char fill); void addNum64(int64_t num, size_t fieldw, char fill); - void addHitRank(HitRank num); - void addSignedHitRank(SignedHitRank num); - void append(const void *data, size_t len); + void append(const char *data); void append(uint8_t byte); - void appendLong(uint64_t n); void appendCompressedPositiveNumber(uint64_t n); void appendCompressedNumber(int64_t n); - bool IsEmpty(); // Return whether all written. - void expandBuf(size_t needlen); size_t GetFreeLen() const { return _bufEnd - _bufFillPos; } size_t GetDrainLen() const { return _bufDrainPos - _bufStart; } const char *GetDrainPos() const { return _bufDrainPos; } const char *GetFillPos() const { return _bufFillPos; } - char * GetWritableFillPos() const { return _bufFillPos; } char * GetWritableFillPos(size_t len) { preAlloc(len); return _bufFillPos; } - char * GetWritableDrainPos(size_t offset) { return _bufDrainPos + offset; } - void truncate(size_t offset) { _bufFillPos = _bufDrainPos + offset; } void preAlloc(size_t len); // Ensure room for 'len' more bytes. - size_t readFile(FastOS_FileInterface &file, size_t maxlen); void reset() { _bufDrainPos = _bufFillPos = _bufStart; } - void Compact(); void Reuse(); size_t GetUsedAndDrainLen() const { return _bufFillPos - _bufStart; } size_t GetUsedLen() const { return _bufFillPos - _bufDrainPos; } @@ -77,68 +78,17 @@ public: } } - /** - * Convert from interNet highendian order at 'src', to unsigned integers - */ - static uint16_t InetTo16(const unsigned char *src) { - return (static_cast<uint16_t>(*src) << 8) + *(src + 1); - }; - static uint16_t InetTo16(const char* src) { - return InetTo16(reinterpret_cast<const unsigned char *>(src)); - }; - static uint32_t InetTo32(const unsigned char* src) { - return (((((static_cast<uint32_t>(*src) << 8) + *(src + 1)) << 8) - + *(src + 2)) << 8) + *(src + 3); - }; - static uint32_t InetTo32(const char* src) { - return InetTo32(reinterpret_cast<const unsigned char *>(src)); - }; - - /** - * Convert unsigned int.s 'src', to interNet highendian order, at 'dst' - * or _bufFillPos. Update or return ref to next char after those filled in. - */ - static unsigned char* ToInet(uint16_t src, unsigned char* dst) { - *(dst + 1) = static_cast<unsigned char>(src); // The least significant 8 bits - src >>= 8; // of 'src' are stored. - *dst = static_cast<unsigned char>(src); - return dst + 2; - }; - void Put16ToInet(uint16_t src) { - ensureSize(2); - _bufFillPos = reinterpret_cast<char *> - (ToInet(src, - reinterpret_cast<unsigned char*>(_bufFillPos))); - }; - static unsigned char* ToInet(uint32_t src, unsigned char* dst) { - *(dst + 3) = src; // The least significant 8 bits - src >>= 8; // of 'src' are stored. - *(dst + 2) = src; - src >>= 8; - *(dst + 1) = src; - src >>= 8; - *dst = src; - return dst + 4; - }; void PutToInet(uint32_t src) { ensureSize(4); - _bufFillPos = reinterpret_cast<char *> - (ToInet(src, - reinterpret_cast<unsigned char*>(_bufFillPos))); + _bufFillPos = reinterpret_cast<char *>(ToInet(src,reinterpret_cast<unsigned char*>(_bufFillPos))); }; - static unsigned char* ToInet(uint64_t src, unsigned char* dst) { - ToInet(static_cast<uint32_t>(src >> 32), dst); - ToInet(static_cast<uint32_t>(src & 0xffffffffull), dst + 4); - return dst + 8; - }; void Put64ToInet(uint64_t src) { ensureSize(8); - _bufFillPos = reinterpret_cast<char *> - (ToInet(src, - reinterpret_cast<unsigned char*>(_bufFillPos))); + _bufFillPos = reinterpret_cast<char *>(ToInet(src,reinterpret_cast<unsigned char*>(_bufFillPos))); }; + }; } diff --git a/searchlib/src/vespa/searchlib/util/slime_output_raw_buf_adapter.h b/searchlib/src/vespa/searchlib/util/slime_output_raw_buf_adapter.h index 5cdfec78ec1..d00a0714045 100644 --- a/searchlib/src/vespa/searchlib/util/slime_output_raw_buf_adapter.h +++ b/searchlib/src/vespa/searchlib/util/slime_output_raw_buf_adapter.h @@ -2,12 +2,12 @@ #pragma once -#include <vespa/vespalib/data/output.h> #include "rawbuf.h" +#include <vespa/vespalib/data/output.h> namespace search { -class SlimeOutputRawBufAdapter : public ::vespalib::Output +class SlimeOutputRawBufAdapter : public vespalib::Output { private: RawBuf &_buf; diff --git a/searchsummary/CMakeLists.txt b/searchsummary/CMakeLists.txt index 60f85c07b86..d36bfdc0bae 100644 --- a/searchsummary/CMakeLists.txt +++ b/searchsummary/CMakeLists.txt @@ -22,6 +22,5 @@ vespa_define_module( src/tests/docsummary/matched_elements_filter src/tests/docsummary/slime_summary src/tests/docsummary/summary_field_converter - src/tests/extractkeywords src/tests/juniper ) diff --git a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp index 7265dd89be4..a00592400b5 100644 --- a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp +++ b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp @@ -2,9 +2,7 @@ #include <vespa/searchcommon/common/undefinedvalues.h> #include <vespa/searchlib/attribute/attributevector.h> -#include <vespa/searchlib/common/matching_elements.h> #include <vespa/searchlib/common/matching_elements_fields.h> -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> #include <vespa/searchsummary/docsummary/docsum_field_writer.h> #include <vespa/searchsummary/docsummary/docsumstate.h> #include <vespa/searchsummary/docsummary/docsum_field_writer_state.h> @@ -40,7 +38,7 @@ struct AttributeCombinerTest : public ::testing::Test std::shared_ptr<search::MatchingElementsFields> _matching_elems_fields; AttributeCombinerTest(); - ~AttributeCombinerTest(); + ~AttributeCombinerTest() override; void set_field(const vespalib::string &field_name, bool filter_elements); void assertWritten(const vespalib::string &exp, uint32_t docId); }; diff --git a/searchsummary/src/tests/docsummary/document_id_dfw/document_id_dfw_test.cpp b/searchsummary/src/tests/docsummary/document_id_dfw/document_id_dfw_test.cpp index 9143f17cb67..06a20563161 100644 --- a/searchsummary/src/tests/docsummary/document_id_dfw/document_id_dfw_test.cpp +++ b/searchsummary/src/tests/docsummary/document_id_dfw/document_id_dfw_test.cpp @@ -44,7 +44,7 @@ make_doc_type_repo() DocumenttypesConfigBuilderHelper builder; builder.document(doc_type_id, doc_type_name, Struct(header_name), Struct(body_name)); - return std::unique_ptr<const DocumentTypeRepo>(new DocumentTypeRepo(builder.config())); + return std::make_unique<const DocumentTypeRepo>(builder.config()); } class DocumentIdDFWTest : public ::testing::Test diff --git a/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp b/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp index 160e4cec973..311a0e68a58 100644 --- a/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp +++ b/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp @@ -14,7 +14,6 @@ #include <vespa/searchlib/attribute/attributevector.h> #include <vespa/searchlib/common/matching_elements.h> #include <vespa/searchlib/common/matching_elements_fields.h> -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> #include <vespa/searchsummary/docsummary/docsum_store_document.h> #include <vespa/searchsummary/docsummary/docsumstate.h> #include <vespa/searchsummary/docsummary/idocsumenvironment.h> @@ -161,8 +160,8 @@ public: { } ~StateCallback() override; - void FillSummaryFeatures(GetDocsumsState*, IDocsumEnvironment*) override {} - void FillRankFeatures(GetDocsumsState*, IDocsumEnvironment*) override {} + void FillSummaryFeatures(GetDocsumsState&) override {} + void FillRankFeatures(GetDocsumsState&) override {} std::unique_ptr<MatchingElements> fill_matching_elements(const MatchingElementsFields&) override { auto result = std::make_unique<MatchingElements>(); result->add_matching_elements(doc_id, _field_name, _matching_elements); diff --git a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp index 60584b26e31..0de84096e82 100644 --- a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp +++ b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp @@ -9,7 +9,6 @@ #include <vespa/searchsummary/docsummary/idocsumenvironment.h> #include <vespa/searchsummary/docsummary/docsumstate.h> #include <vespa/searchsummary/test/slime_value.h> -#include <vespa/searchlib/util/rawbuf.h> #include <vespa/vespalib/testkit/testapp.h> #include <vespa/vespalib/data/slime/slime.h> #include <vespa/juniper/rpinterface.h> @@ -52,7 +51,7 @@ struct MyEnvironment : IDocsumEnvironment { MyEnvironment() : attribute_man(0) {} - IAttributeManager *getAttributeManager() override { return attribute_man; } + const IAttributeManager *getAttributeManager() const override { return attribute_man; } string lookupIndex(const string &s) const override { return s; } juniper::Juniper *getJuniper() override { return 0; } }; @@ -98,7 +97,7 @@ public: } IAttributeContext::UP createContext() const override { - return IAttributeContext::UP(new MyAttributeContext(_attr)); + return std::make_unique<MyAttributeContext>(_attr); } std::shared_ptr<attribute::ReadableAttributeVector> readable_attribute_vector(const string&) const override { @@ -107,8 +106,8 @@ public: }; struct MyGetDocsumsStateCallback : GetDocsumsStateCallback { - virtual void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override {} - virtual void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override {} + virtual void FillSummaryFeatures(GetDocsumsState&) override {} + virtual void FillRankFeatures(GetDocsumsState&) override {} std::unique_ptr<MatchingElements> fill_matching_elements(const MatchingElementsFields &) override { abort(); } }; diff --git a/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp b/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp index 445b08570a6..88c6cd974b9 100644 --- a/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp +++ b/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp @@ -14,13 +14,15 @@ #include <vespa/searchlib/common/matching_elements.h> #include <vespa/searchsummary/docsummary/docsumwriter.h> #include <vespa/searchsummary/docsummary/docsumstate.h> +#include <vespa/searchsummary/docsummary/keywordextractor.h> #include <vespa/searchsummary/docsummary/docsum_store_document.h> #include <vespa/vespalib/data/slime/slime.h> -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> +#include <vespa/vespalib/data/smart_buffer.h> #include <vespa/vespalib/util/size_literals.h> using namespace vespalib::slime::convenience; using namespace search::docsummary; +using vespalib::slime::BinaryFormat; using search::MatchingElements; using document::ByteFieldValue; using document::DataType; @@ -40,39 +42,20 @@ using document::StructFieldValue; namespace { -struct FieldBlock { - Slime slime; - search::RawBuf binary; - - explicit FieldBlock(const vespalib::string &jsonInput) - : slime(), binary(1024) - { - size_t used = vespalib::slime::JsonFormat::decode(jsonInput, slime); - EXPECT_TRUE(used > 0); - search::SlimeOutputRawBufAdapter adapter(binary); - vespalib::slime::BinaryFormat::encode(slime, adapter); - } - const char *data() const { return binary.GetDrainPos(); } - size_t dataLen() const { return binary.GetUsedLen(); } -}; - struct DocsumFixture : IDocsumStore, GetDocsumsStateCallback { std::unique_ptr<DynamicDocsumWriter> writer; StructDataType int_pair_type; DocumentType doc_type; GetDocsumsState state; DocsumFixture(); - ~DocsumFixture(); + ~DocsumFixture() override; void getDocsum(Slime &slime) { - uint32_t classId; - search::RawBuf buf(4_Ki); - writer->WriteDocsum(1u, &state, this, &buf); - ASSERT_GREATER(buf.GetUsedLen(), sizeof(classId)); - memcpy(&classId, buf.GetDrainPos(), sizeof(classId)); - buf.Drain(sizeof(classId)); - EXPECT_EQUAL(classId, SLIME_MAGIC_ID); - EXPECT_GREATER(vespalib::slime::BinaryFormat - ::decode(Memory(buf.GetDrainPos(), buf.GetUsedLen()), slime), 0u); + Slime slimeOut; + SlimeInserter inserter(slimeOut); + writer->WriteDocsum(1u, &state, this, inserter); + vespalib::SmartBuffer buf(4_Ki); + BinaryFormat::encode(slimeOut, buf); + EXPECT_GREATER(BinaryFormat::decode(buf.obtain(), slime), 0u); } uint32_t getNumDocs() const override { return 2; } std::unique_ptr<const IDocsumStoreDocument> getMappedDocsum(uint32_t docid) override { @@ -96,8 +79,8 @@ struct DocsumFixture : IDocsumStore, GetDocsumsStateCallback { } return std::make_unique<DocsumStoreDocument>(std::move(doc)); } - void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override { } - void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override { } + void FillSummaryFeatures(GetDocsumsState&) override { } + void FillRankFeatures(GetDocsumsState&) override { } std::unique_ptr<MatchingElements> fill_matching_elements(const search::MatchingElementsFields &) override { abort(); } }; @@ -110,7 +93,7 @@ DocsumFixture::DocsumFixture() { auto config = std::make_unique<ResultConfig>(); ResultClass *cfg = config->AddResultClass("default", 0); - EXPECT_TRUE(cfg != 0); + EXPECT_TRUE(cfg != nullptr); EXPECT_TRUE(cfg->AddConfigEntry("int_field", RES_INT)); EXPECT_TRUE(cfg->AddConfigEntry("short_field", RES_SHORT)); EXPECT_TRUE(cfg->AddConfigEntry("byte_field", RES_BYTE)); @@ -139,7 +122,7 @@ DocsumFixture::DocsumFixture() doc_type.addField(Field("longdata_field", *DataType::RAW)); doc_type.addField(Field("int_pair_field", int_pair_type)); } -DocsumFixture::~DocsumFixture() {} +DocsumFixture::~DocsumFixture() = default; } // namespace <unnamed> diff --git a/searchsummary/src/tests/docsummary/summary_field_converter/summary_field_converter_test.cpp b/searchsummary/src/tests/docsummary/summary_field_converter/summary_field_converter_test.cpp index 06766ba370a..1d7795d26dc 100644 --- a/searchsummary/src/tests/docsummary/summary_field_converter/summary_field_converter_test.cpp +++ b/searchsummary/src/tests/docsummary/summary_field_converter/summary_field_converter_test.cpp @@ -132,7 +132,7 @@ FieldBlock::FieldBlock(const vespalib::string &jsonInput) vespalib::slime::BinaryFormat::encode(slime, adapter); } -FieldBlock::~FieldBlock() {} +FieldBlock::~FieldBlock() = default; class Test : public vespalib::TestApp { std::unique_ptr<Schema> _schema; @@ -242,7 +242,7 @@ DocumenttypesConfig getDocumenttypesConfig() { } Test::Test() : - _documentRepo(new DocumentTypeRepo(getDocumenttypesConfig())), + _documentRepo(std::make_unique<DocumentTypeRepo>(getDocumenttypesConfig())), _documentType(_documentRepo->getDocumentType("indexingdocument")), _fixedRepo(*_documentRepo, *_documentType) { @@ -285,8 +285,8 @@ Test::Main() } void Test::setUp() { - _schema.reset(new Schema); - _summarymap.reset(new SummarymapConfigBuilder); + _schema = std::make_unique<Schema>(); + _summarymap = std::make_unique<SummarymapConfigBuilder>(); } void Test::tearDown() { @@ -298,34 +298,26 @@ const DataType &Test::getDataType(const string &name) const { return *type; } -template <typename T> -std::unique_ptr<T> makeUP(T *p) { return std::unique_ptr<T>(p); } - StringFieldValue Test::makeAnnotatedString() { - SpanList *span_list = new SpanList; - SpanTree::UP tree(new SpanTree(SPANTREE_NAME, makeUP(span_list))); + auto span_list_up = std::make_unique<SpanList>(); + auto span_list = span_list_up.get(); + auto tree = std::make_unique<SpanTree>(SPANTREE_NAME, std::move(span_list_up)); // Annotations don't have to be added sequentially. - tree->annotate(span_list->add(makeUP(new Span(8, 3))), - makeUP(new Annotation(*TERM, - makeUP(new StringFieldValue( - "Annotation"))))); - tree->annotate(span_list->add(makeUP(new Span(0, 3))), *TERM); - tree->annotate(span_list->add(makeUP(new Span(4, 3))), *TERM); - tree->annotate(span_list->add(makeUP(new Span(4, 3))), - makeUP(new Annotation(*TERM, - makeUP(new StringFieldValue( - "Multiple"))))); - tree->annotate(span_list->add(makeUP(new Span(1, 2))), - makeUP(new Annotation(*TERM, - makeUP(new StringFieldValue( - "Overlap"))))); + tree->annotate(span_list->add(std::make_unique<Span>(8, 3)), + Annotation(*TERM, std::make_unique<StringFieldValue>("Annotation"))); + tree->annotate(span_list->add(std::make_unique<Span>(0, 3)), *TERM); + tree->annotate(span_list->add(std::make_unique<Span>(4, 3)), *TERM); + tree->annotate(span_list->add(std::make_unique<Span>(4, 3)), + Annotation(*TERM, std::make_unique<StringFieldValue>("Multiple"))); + tree->annotate(span_list->add(std::make_unique<Span>(1, 2)), + Annotation(*TERM, std::make_unique<StringFieldValue>("Overlap"))); StringFieldValue value("Foo Bar Baz"); setSpanTree(value, std::move(tree)); return value; } StringFieldValue Test::annotateTerm(const string &term) { - SpanTree::UP tree(new SpanTree(SPANTREE_NAME, makeUP(new Span(0, term.size())))); + auto tree = std::make_unique<SpanTree>(SPANTREE_NAME, std::make_unique<Span>(0, term.size())); tree->annotate(tree->getRoot(), *TERM); StringFieldValue value(term); setSpanTree(value, std::move(tree)); @@ -339,11 +331,12 @@ void Test::setSpanTree(StringFieldValue & value, SpanTree::UP tree) { } StringFieldValue Test::makeAnnotatedChineseString() { - SpanList *span_list = new SpanList; - SpanTree::UP tree(new SpanTree(SPANTREE_NAME, makeUP(span_list))); + auto span_list_up = std::make_unique<SpanList>(); + auto span_list = span_list_up.get(); + auto tree = std::make_unique<SpanTree>(SPANTREE_NAME, std::move(span_list_up)); // These chinese characters each use 3 bytes in their UTF8 encoding. - tree->annotate(span_list->add(makeUP(new Span(0, 15))), *TERM); - tree->annotate(span_list->add(makeUP(new Span(15, 9))), *TERM); + tree->annotate(span_list->add(std::make_unique<Span>(0, 15)), *TERM); + tree->annotate(span_list->add(std::make_unique<Span>(15, 9)), *TERM); StringFieldValue value("我就是那个大灰狼"); setSpanTree(value, std::move(tree)); return value; @@ -660,7 +653,7 @@ void Test::requireThatLinguisticsAnnotationUsesDefaultDataTypes() { void Test::requireThatPredicateIsPrinted() { - std::unique_ptr<Slime> input(new Slime()); + auto input = std::make_unique<Slime>(); Cursor &obj = input->setObject(); obj.setLong(Predicate::NODE_TYPE, Predicate::TYPE_FEATURE_SET); obj.setString(Predicate::KEY, "foo"); diff --git a/searchsummary/src/tests/extractkeywords/.gitignore b/searchsummary/src/tests/extractkeywords/.gitignore deleted file mode 100644 index 1b50b24b284..00000000000 --- a/searchsummary/src/tests/extractkeywords/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.core -.depend -Makefile -core -core.* -extractkeywordstest -searchsummary_extractkeywordstest_app diff --git a/searchsummary/src/tests/extractkeywords/CMakeLists.txt b/searchsummary/src/tests/extractkeywords/CMakeLists.txt deleted file mode 100644 index 802bff92544..00000000000 --- a/searchsummary/src/tests/extractkeywords/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -vespa_add_executable(searchsummary_extractkeywordstest_app TEST - SOURCES - extractkeywordstest.cpp - simplequerystack.cpp - simplequerystackitem.cpp - DEPENDS - searchsummary -) -vespa_add_test(NAME searchsummary_extractkeywordstest_app COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/runtests.sh - DEPENDS searchsummary_extractkeywordstest_app) diff --git a/searchsummary/src/tests/extractkeywords/extractkeywordstest.cpp b/searchsummary/src/tests/extractkeywords/extractkeywordstest.cpp deleted file mode 100644 index 724cf338497..00000000000 --- a/searchsummary/src/tests/extractkeywords/extractkeywordstest.cpp +++ /dev/null @@ -1,295 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include "extractkeywordstest.h" -#include <vespa/vespalib/util/signalhandler.h> -#include <vespa/searchsummary/docsummary/keywordextractor.h> -#include "simplequerystack.h" -#include <vespa/vespalib/util/size_literals.h> -#include <vespa/vespalib/util/time.h> - -#define NUMTESTS 5 - -int -ExtractKeywordsTest::main(int argc, char **argv) -{ - int doTest[NUMTESTS]; - int low, high, accnum, num; - int indicator; - bool verify = false; - int multiplier = 1; - bool failed = false; - - if (argc == 1) - return Usage(argv[0]); - - // default initialize to not run any tests. - for (int n = 0; n < NUMTESTS; n++) - doTest[n] = 0; - - // parse the command line arguments - for (int i = 1; i < argc; i++) { - low = 0; - high = NUMTESTS - 1; - char *p = argv[i]; - - // Check if a multiplier is specified - if (*p == '*') { - p++; - accnum = 0; - while (*p != '\0') { - num = *p - '0'; - accnum = accnum * 10 + num; - p++; - } - multiplier = accnum; - continue; - } - - // Default is to run the tests specified, unless the first char is '/' - indicator = 1; - if (*p == '/') { - p++; - indicator = 0; - } - - // Find the first number - accnum = 0; - while (*p != '-' && *p != '\0') { - num = *p - '0'; - accnum = accnum * 10 + num; - p++; - } - if (accnum >= NUMTESTS) - continue; - low = accnum; - // Check for range operator - if (*p == '-') { - p++; - // Find the second number - accnum = 0; - while (*p != '\0') { - num = *p - '0'; - accnum = accnum * 10 + num; - p++; - } - if (accnum > 0) - high = accnum < NUMTESTS ? accnum : NUMTESTS-1; - } else - high = low; - - // Indicate the runrequest for the desired range. - for (int j = low; j <= high; j++) - doTest[j] = indicator; - } - - // Remove unused tests. - // doTest[1] = 0; - - // Remember time - if (multiplier > 1) { - printf("Running all tests %d times.\n", multiplier); - verify = false; - } else { - verify = true; - } - - int testCnt = 0; - - // init keyword extractor - _extractor = new search::docsummary::KeywordExtractor(nullptr); - _extractor->AddLegalIndexSpec("*"); - - vespalib::Timer timer; - - // Actually run the tests that we wanted. - for (int j = 0; j < multiplier; j++) - for (int k = 0; k < NUMTESTS; k++) - if (doTest[k] == 1) { - if (!RunTest(k, verify)) - failed = true; - testCnt++; - } - - // Print time taken - double timeTaken = vespalib::to_s(timer.elapsed())*1000.0; - - printf("Time taken : %f ms\n", timeTaken); - printf("Number of tests run: %d\n", testCnt); - double avgTestPrMSec = static_cast<double>(testCnt) / timeTaken; - printf("Tests pr Sec: %f\n", avgTestPrMSec * 1000.0); - - delete _extractor; - _extractor = nullptr; - - return failed ? 1 : 0; -} - -bool -ExtractKeywordsTest::ShowResult(int testNo, - const char *actual, const char *correct) -{ - const char *act_word = actual; - const char *cor_word = correct; - printf("%03d: ", testNo); - - while (*act_word != '\0') { - if (strcmp(act_word, cor_word) != 0) { - printf("fail. Keywords differ for act: %s, corr: %s\n", - act_word, cor_word); - return false; - } else { - act_word += strlen(act_word) + 1; - cor_word += strlen(cor_word) + 1; - } - } - if (*cor_word != '\0') { - printf("fail. actual list shorter than correct at %s\n", cor_word); - return false; - } - printf("ok\n"); - return true; -} - -/** - * - * @param testno The test to run. - * @param verify Verify the result of the test. - */ -bool -ExtractKeywordsTest::RunTest(int testno, bool verify) -{ - search::SimpleQueryStack stack; - search::RawBuf buf(32_Ki); - const char *correct = nullptr; - const char *keywords = nullptr; - - switch (testno) { - case 0: - { - // Simple term query - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foobar")); - - stack.AppendBuffer(&buf); - keywords = _extractor->ExtractKeywords(vespalib::stringref(buf.GetDrainPos(), buf.GetUsedLen())); - correct = "foobar\0\0"; - - if (verify) ShowResult(testno, keywords, correct); - free(const_cast<char *>(keywords)); - break; - } - - case 1: - { - // check that skipping these works also: - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_GEO_LOCATION_TERM, "no")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_NEAREST_NEIGHBOR, "no")); - // multi term query - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foobar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foo")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "bar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_OR, 3)); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_AND, 3)); - - stack.AppendBuffer(&buf); - keywords = _extractor->ExtractKeywords(vespalib::stringref(buf.GetDrainPos(), buf.GetUsedLen())); - correct = "bar\0foo\0foobar\0\0"; - - if (verify) ShowResult(testno, keywords, correct); - free(const_cast<char *>(keywords)); - break; - } - - case 2: - { - // phrase term query - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foobar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foo")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "bar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_PHRASE, 3, "index")); - - stack.AppendBuffer(&buf); - keywords = _extractor->ExtractKeywords(vespalib::stringref(buf.GetDrainPos(), buf.GetUsedLen())); - correct = "bar foo foobar\0\0"; - - if (verify) ShowResult(testno, keywords, correct); - free(const_cast<char *>(keywords)); - break; - } - - case 3: - { - // multiple phrase and term query - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "xyzzy")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "xyz")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_PHRASE, 2, "index")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foobar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foo")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "bar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_PHRASE, 3, "index")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "baz")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "zog")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_AND, 3)); - - stack.AppendBuffer(&buf); - keywords = _extractor->ExtractKeywords(vespalib::stringref(buf.GetDrainPos(), buf.GetUsedLen())); - correct = "zog\0baz\0bar foo foobar\0xyz xyzzy\0\0"; - - if (verify) ShowResult(testno, keywords, correct); - free(const_cast<char *>(keywords)); - break; - } - - case 4: - { - // phrase term query with wrong argument items - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foobar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "foo")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_AND, 2)); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_TERM, "bar")); - stack.Push(new search::SimpleQueryStackItem(search::ParseItem::ITEM_PHRASE, 2, "index")); - - stack.AppendBuffer(&buf); - keywords = _extractor->ExtractKeywords(vespalib::stringref(buf.GetDrainPos(), buf.GetUsedLen())); - correct = "\0"; - - if (verify) ShowResult(testno, keywords, correct); - free(const_cast<char *>(keywords)); - break; - } - - default: - { - printf("%03d: no such test\n", testno); - return false; - } - } - - bool result = true; - /* - if (verify) { - result = ShowResult(testno, pq->GetStack(), correct); - delete correct; - } else { - result = true; - } - delete pq; - */ - return result; -} - -int -ExtractKeywordsTest::Usage(char *progname) -{ - printf("%s {testnospec}+\n\ - Where testnospec is:\n\ - num: single test\n\ - num-num: inclusive range (open range permitted)\n",progname); - printf("There are tests from %d to %d\n\n", 0, NUMTESTS-1); - return EXIT_FAILURE; -} - -int main(int argc, char** argv) { - vespalib::SignalHandler::PIPE.ignore(); - ExtractKeywordsTest tester; - return tester.main(argc, argv); -} diff --git a/searchsummary/src/tests/extractkeywords/extractkeywordstest.h b/searchsummary/src/tests/extractkeywords/extractkeywordstest.h deleted file mode 100644 index 6bd07d8a111..00000000000 --- a/searchsummary/src/tests/extractkeywords/extractkeywordstest.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#pragma once - -namespace search::docsummary { class KeywordExtractor; } - -class ExtractKeywordsTest -{ -private: - ExtractKeywordsTest(const ExtractKeywordsTest &); - ExtractKeywordsTest& operator=(const ExtractKeywordsTest &); - - search::docsummary::KeywordExtractor *_extractor; - - int Usage(char *progname); - bool ShowResult(int testNo, const char *actual, const char *correct); - bool RunTest(int i, bool verify); - -public: - ExtractKeywordsTest() - : _extractor(nullptr) - {} - int main(int argc, char **argv); -}; - diff --git a/searchsummary/src/tests/extractkeywords/runtests.sh b/searchsummary/src/tests/extractkeywords/runtests.sh deleted file mode 100755 index 611b47dd888..00000000000 --- a/searchsummary/src/tests/extractkeywords/runtests.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -set -e - -if $VALGRIND ./searchsummary_extractkeywordstest_app - -then - : -else - echo FAILED: searchsummary_extractkeywordstest_app test failed - exit 1 -fi - -if $VALGRIND ./searchsummary_extractkeywordstest_app - '*1000' -then - : -else - echo FAILED: searchsummary_extractkeywordstest_app test failed - exit 1 -fi - -echo SUCCESS: searchsummary_extractkeywordstest_app test completed diff --git a/searchsummary/src/tests/extractkeywords/simplequerystack.cpp b/searchsummary/src/tests/extractkeywords/simplequerystack.cpp deleted file mode 100644 index c96ef8a8455..00000000000 --- a/searchsummary/src/tests/extractkeywords/simplequerystack.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include "simplequerystack.h" -#include <vespa/vespalib/util/compress.h> - -#include <vespa/log/log.h> -LOG_SETUP(".search.simplequerystack"); - -namespace search { - -SimpleQueryStack::SimpleQueryStack() - : _stack(nullptr) -{ -} - -SimpleQueryStack::~SimpleQueryStack() -{ - delete _stack; -} - -void -SimpleQueryStack::Push(SimpleQueryStackItem *item) -{ - item->_next = _stack; - _stack = item; -} - -void -SimpleQueryStack::AppendBuffer(RawBuf *buf) const -{ - for (SimpleQueryStackItem *item = _stack; item != nullptr; item = item->_next) { - item->AppendBuffer(buf); - } -} - -} // namespace search diff --git a/searchsummary/src/tests/extractkeywords/simplequerystack.h b/searchsummary/src/tests/extractkeywords/simplequerystack.h deleted file mode 100644 index 0b61a41944b..00000000000 --- a/searchsummary/src/tests/extractkeywords/simplequerystack.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#pragma once - -#include "simplequerystackitem.h" -#include <vespa/searchlib/util/rawbuf.h> -#include <vespa/vespalib/stllike/string.h> - -namespace search { - -/** - * A stack of SimpleQueryStackItems. - * - * A simple stack consisting of a list of SimpleQueryStackItems. - * It is able to generate a binary encoding of itself - * to a RawBuf. - */ -class SimpleQueryStack -{ -private: - /** The top of the stack. */ - SimpleQueryStackItem *_stack; - -public: - SimpleQueryStack(const SimpleQueryStack &) = delete; - SimpleQueryStack& operator=(const SimpleQueryStack &) = delete; - /** - * Constructor for SimpleQueryStack. - */ - SimpleQueryStack(); - /** - * Destructor for SimpleQueryStack. - */ - ~SimpleQueryStack(); - /** - * Push an item on the stack. - * @param item The SimpleQueryStackItem to push. - */ - void Push(SimpleQueryStackItem *item); - - /** - * Encode the contents of the stack in a binary buffer. - * @param buf Pointer to a buffer containing the encoded contents. - */ - void AppendBuffer(RawBuf *buf) const; -}; - -} // namespace search - diff --git a/searchsummary/src/tests/extractkeywords/simplequerystackitem.cpp b/searchsummary/src/tests/extractkeywords/simplequerystackitem.cpp deleted file mode 100644 index 65815f86251..00000000000 --- a/searchsummary/src/tests/extractkeywords/simplequerystackitem.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include "simplequerystackitem.h" -#include <vespa/vespalib/objects/nbo.h> -#include <vespa/vespalib/stllike/asciistream.h> -#include <cassert> - -namespace search { - -SimpleQueryStackItem::SimpleQueryStackItem() - : _next(NULL), - _arg1(0), - _arg2(0), - _arg3(0), - _type(ITEM_UNDEF), - _arity(0), - _indexName(), - _term() -{} - -namespace { - -void assert_term_type(ParseItem::ItemType type) { - assert(type == ParseItem::ITEM_TERM || - type == ParseItem::ITEM_NUMTERM || - type == ParseItem::ITEM_NEAREST_NEIGHBOR || - type == ParseItem::ITEM_GEO_LOCATION_TERM || - type == ParseItem::ITEM_PREFIXTERM || - type == ParseItem::ITEM_SUBSTRINGTERM || - type == ParseItem::ITEM_SUFFIXTERM || - type == ParseItem::ITEM_PURE_WEIGHTED_STRING || - type == ParseItem::ITEM_PURE_WEIGHTED_LONG || - type == ParseItem::ITEM_EXACTSTRINGTERM || - type == ParseItem::ITEM_PREDICATE_QUERY); - (void) type; -} - -void assert_arity_type(ParseItem::ItemType type) { - // types with arity, but without an index name: - assert(type == ParseItem::ITEM_OR || - type == ParseItem::ITEM_WEAK_AND || - type == ParseItem::ITEM_EQUIV || - type == ParseItem::ITEM_AND || - type == ParseItem::ITEM_NOT || - type == ParseItem::ITEM_RANK || - type == ParseItem::ITEM_ANY || - type == ParseItem::ITEM_NEAR || - type == ParseItem::ITEM_ONEAR); - (void) type; -} - -void assert_arity_and_index_type(ParseItem::ItemType type) { - // types with arity and an index name: - assert(type == ParseItem::ITEM_PHRASE || - type == ParseItem::ITEM_SAME_ELEMENT || - type == ParseItem::ITEM_WEIGHTED_SET || - type == ParseItem::ITEM_DOT_PRODUCT || - type == ParseItem::ITEM_WAND || - type == ParseItem::ITEM_WORD_ALTERNATIVES); - (void) type; -} - -int64_t term_as_n64(vespalib::stringref term) { - int64_t tmp; - vespalib::asciistream generatedTerm(term); - generatedTerm >> tmp; - return vespalib::nbo::n2h(tmp); -} - -} // namespace <unnamed> - - -SimpleQueryStackItem::SimpleQueryStackItem(ItemType type, int arity) : SimpleQueryStackItem() -{ - assert_arity_type(type); - SetType(type); - _arity = arity; -} - -SimpleQueryStackItem::SimpleQueryStackItem(ItemType type, int arity, const char *idx) : SimpleQueryStackItem() -{ - assert_arity_and_index_type(type); - SetType(type); - _arity = arity; - SetIndex(idx); -} - -SimpleQueryStackItem::SimpleQueryStackItem(ItemType type, const char *term) : SimpleQueryStackItem() -{ - assert_term_type(type); - SetType(type); - SetTerm(term); -} - -SimpleQueryStackItem::~SimpleQueryStackItem() -{ - delete _next; -} - -void -SimpleQueryStackItem::AppendBuffer(RawBuf *buf) const -{ - // Calculate lengths - uint32_t indexLen = _indexName.size(); - uint32_t termLen = _term.size(); - double nboVal = 0.0; - - // Put the values into the buffer. - buf->append(_type); - switch (Type()) { - case ITEM_OR: - case ITEM_EQUIV: - case ITEM_AND: - case ITEM_NOT: - case ITEM_RANK: - case ITEM_ANY: - buf->appendCompressedPositiveNumber(_arity); - break; - case ITEM_NEAR: - case ITEM_ONEAR: - buf->appendCompressedPositiveNumber(_arity); - buf->appendCompressedPositiveNumber(_arg1); - break; - case ITEM_SAME_ELEMENT: - case ITEM_WEIGHTED_SET: - case ITEM_DOT_PRODUCT: - case ITEM_PHRASE: - buf->appendCompressedPositiveNumber(_arity); - buf->appendCompressedPositiveNumber(indexLen); - buf->append(_indexName.c_str(), indexLen); - break; - case ITEM_WORD_ALTERNATIVES: - buf->appendCompressedPositiveNumber(indexLen); - buf->append(_indexName.c_str(), indexLen); - buf->appendCompressedPositiveNumber(_arity); - break; - case ITEM_WEAK_AND: - buf->appendCompressedPositiveNumber(_arity); - buf->appendCompressedPositiveNumber(_arg1); - buf->appendCompressedPositiveNumber(indexLen); - buf->append(_indexName.c_str(), indexLen); - break; - case ITEM_WAND: - buf->appendCompressedPositiveNumber(_arity); - buf->appendCompressedPositiveNumber(indexLen); - buf->append(_indexName.c_str(), indexLen); - buf->appendCompressedPositiveNumber(_arg1); // targetNumHits - nboVal = vespalib::nbo::n2h(_arg2); - buf->append(&nboVal, sizeof(nboVal)); // scoreThreshold - nboVal = vespalib::nbo::n2h(_arg3); - buf->append(&nboVal, sizeof(nboVal)); // thresholdBoostFactor - break; - case ITEM_TERM: - case ITEM_NUMTERM: - case ITEM_GEO_LOCATION_TERM: - case ITEM_PREFIXTERM: - case ITEM_SUBSTRINGTERM: - case ITEM_EXACTSTRINGTERM: - case ITEM_SUFFIXTERM: - case ITEM_REGEXP: - case ITEM_FUZZY: - buf->appendCompressedPositiveNumber(indexLen); - buf->append(_indexName.c_str(), indexLen); - buf->appendCompressedPositiveNumber(termLen); - buf->append(_term.c_str(), termLen); - break; - case ITEM_TRUE: - case ITEM_FALSE: - // no content - break; - case ITEM_PURE_WEIGHTED_STRING: - buf->appendCompressedPositiveNumber(termLen); - buf->append(_term.c_str(), termLen); - break; - case ITEM_PURE_WEIGHTED_LONG: - { - int64_t tmp = term_as_n64(_term); - buf->append(&tmp, sizeof(int64_t)); - } - break; - case ITEM_NEAREST_NEIGHBOR: - buf->appendCompressedPositiveNumber(indexLen); - buf->append(_indexName.c_str(), indexLen); - buf->appendCompressedPositiveNumber(termLen); - buf->append(_term.c_str(), termLen); - buf->appendCompressedPositiveNumber(_arg1); // targetNumHits - buf->appendCompressedPositiveNumber(_arg2); // allow_approximate - buf->appendCompressedPositiveNumber(_arg3); // explore_additional_hits - break; - case ITEM_MULTI_TERM: // TODO: handle - case ITEM_PREDICATE_QUERY: // not handled at all here - case ITEM_UNDEF: - abort(); - break; - } -} - -} diff --git a/searchsummary/src/tests/extractkeywords/simplequerystackitem.h b/searchsummary/src/tests/extractkeywords/simplequerystackitem.h deleted file mode 100644 index 58864e18444..00000000000 --- a/searchsummary/src/tests/extractkeywords/simplequerystackitem.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#pragma once - -#include <vespa/searchlib/query/weight.h> -#include <vespa/searchlib/util/rawbuf.h> -#include <vespa/vespalib/stllike/string.h> -#include <vespa/searchlib/parsequery/parse.h> - -namespace search { - -/** - * An item on the simple query stack. - * - * An object of this class represents a single item - * on the simple query stack. It has a type, which corresponds - * to the different query stack execution operations. It also - * provides an arity, and the string values indexName and term, to - * accomodate the different needs of the operations. - */ -class SimpleQueryStackItem : public ParseItem -{ -private: - SimpleQueryStackItem(const SimpleQueryStackItem &) = delete; - SimpleQueryStackItem& operator=(const SimpleQueryStackItem &) = delete; - SimpleQueryStackItem(); -public: - /** Pointer to next item in a linked list. */ - SimpleQueryStackItem *_next; - -private: - uint32_t _arg1; - double _arg2; - double _arg3; - ItemType _type; - -public: - ItemType Type() const { return _type; } - - /** The number of operands for the operation. */ - uint32_t _arity; - /** The name of the specified index, or empty if no index. */ - vespalib::string _indexName; - /** The specified search term. */ - vespalib::string _term; - -/** - * Overloaded constructor for SimpleQueryStackItem. Used primarily for - * the operators, or phrase without indexName. - * - * @param type The type of the SimpleQueryStackItem. - * @param arity The arity of the operation indicated by the SimpleQueryStackItem. - */ - SimpleQueryStackItem(ItemType type, int arity); - -/** - * Overloaded constructor for SimpleQueryStackItem. Used for PHRASEs. - * - * @param type The type of the SimpleQueryStackItem. - * @param arity The arity of the operation indicated by the SimpleQueryStackItem. - * @param idx The name of the index of the SimpleQueryStackItem. - */ - SimpleQueryStackItem(ItemType type, int arity, const char *index); - -/** - * Overloaded constructor for SimpleQueryStackItem. Used for TERMs without index. - * - * @param type The type of the SimpleQueryStackItem. - * @param term The actual term string of the SimpleQueryStackItem. - */ - SimpleQueryStackItem(ItemType type, const char *term); - -/** - * Destructor for SimpleQueryStackItem. - */ - ~SimpleQueryStackItem(); - -/** - * Set the value of the _term field. - * @param term The string to set the _term field to. - */ - void SetTerm(const char *term) { _term = term; } - -/** - * Set the value of the _indexName field. - * @param idx The string to set the _indexName field to. - */ - void SetIndex(const char *index) { _indexName = index; } - - /** - * Set the type of the operator. Use this with caution, - * as this changes the semantics of the item. - * - * @param type The new type. - */ - void SetType(ItemType type) { - _type = type; - } - - /** - * Encode the item in a binary buffer. - * @param buf Pointer to a buffer containing the encoded contents. - */ - void AppendBuffer(RawBuf *buf) const; -}; - -} diff --git a/searchsummary/src/vespa/searchsummary/docsummary/CMakeLists.txt b/searchsummary/src/vespa/searchsummary/docsummary/CMakeLists.txt index aec86d49d7d..963c94f7796 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/CMakeLists.txt +++ b/searchsummary/src/vespa/searchsummary/docsummary/CMakeLists.txt @@ -9,6 +9,7 @@ vespa_add_library(searchsummary_docsummary OBJECT copy_dfw.cpp docsumconfig.cpp docsum_field_writer.cpp + docsum_field_writer_factory.cpp docsum_store_document.cpp docsumstate.cpp docsumwriter.cpp @@ -24,6 +25,7 @@ vespa_add_library(searchsummary_docsummary OBJECT matched_elements_filter_dfw.cpp positionsdfw.cpp rankfeaturesdfw.cpp + res_config_entry.cpp res_type_utils.cpp resultclass.cpp resultconfig.cpp diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp index 285148951fa..60e3bd6d815 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp @@ -364,7 +364,7 @@ create_multi_writer(const IAttributeVector& attr, bool filter_elements, std::sha } std::unique_ptr<DocsumFieldWriter> -AttributeDFWFactory::create(IAttributeManager& attr_mgr, +AttributeDFWFactory::create(const IAttributeManager& attr_mgr, const vespalib::string& attr_name, bool filter_elements, std::shared_ptr<MatchingElementsFields> matching_elems_fields) diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h index 88356ac783e..2b61803ebb3 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h @@ -18,7 +18,7 @@ namespace search::docsummary { */ class AttributeDFWFactory { public: - static std::unique_ptr<DocsumFieldWriter> create(IAttributeManager& attr_mgr, + static std::unique_ptr<DocsumFieldWriter> create(const IAttributeManager& attr_mgr, const vespalib::string& attr_name, bool filter_elements = false, std::shared_ptr<MatchingElementsFields> matching_elems_fields = std::shared_ptr<MatchingElementsFields>()); diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp new file mode 100644 index 00000000000..cebfac4c86d --- /dev/null +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp @@ -0,0 +1,121 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "docsum_field_writer_factory.h" +#include "attribute_combiner_dfw.h" +#include "copy_dfw.h" +#include "document_id_dfw.h" +#include "empty_dfw.h" +#include "geoposdfw.h" +#include "idocsumenvironment.h" +#include "juniperdfw.h" +#include "matched_elements_filter_dfw.h" +#include "positionsdfw.h" +#include "rankfeaturesdfw.h" +#include "summaryfeaturesdfw.h" +#include <vespa/searchlib/common/matching_elements_fields.h> +#include <vespa/vespalib/util/exceptions.h> + +using vespalib::IllegalArgumentException; + +namespace search::docsummary { + +DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, IDocsumEnvironment& env) + : _use_v8_geo_positions(use_v8_geo_positions), + _env(env), + _matching_elems_fields(std::make_shared<MatchingElementsFields>()) +{ +} + +DocsumFieldWriterFactory::~DocsumFieldWriterFactory() = default; + +bool +DocsumFieldWriterFactory::has_attribute_manager() const noexcept +{ + return getEnvironment().getAttributeManager() != nullptr; +} + +std::unique_ptr<DocsumFieldWriter> +DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fieldName, const vespalib::string& overrideName, const vespalib::string& argument, bool& rc) +{ + rc = false; + std::unique_ptr<DocsumFieldWriter> fieldWriter; + if (overrideName == "dynamicteaser") { + if ( ! argument.empty() ) { + auto fw = std::make_unique<DynamicTeaserDFW>(getEnvironment().getJuniper()); + auto fw_ptr = fw.get(); + fieldWriter = std::move(fw); + rc = fw_ptr->Init(fieldName.c_str(), argument); + } else { + throw IllegalArgumentException("Missing argument"); + } + } else if (overrideName == "summaryfeatures") { + fieldWriter = std::make_unique<SummaryFeaturesDFW>(); + rc = true; + } else if (overrideName == "rankfeatures") { + fieldWriter = std::make_unique<RankFeaturesDFW>(); + rc = true; + } else if (overrideName == "empty") { + fieldWriter = std::make_unique<EmptyDFW>(); + rc = true; + } else if (overrideName == "copy") { + if ( ! argument.empty() ) { + fieldWriter = std::make_unique<CopyDFW>(argument); + rc = true; + } else { + throw IllegalArgumentException("Missing argument"); + } + } else if (overrideName == "absdist") { + if (has_attribute_manager()) { + fieldWriter = AbsDistanceDFW::create(argument.c_str(), getEnvironment().getAttributeManager()); + rc = static_cast<bool>(fieldWriter); + } + } else if (overrideName == "positions") { + if (has_attribute_manager()) { + fieldWriter = PositionsDFW::create(argument.c_str(), getEnvironment().getAttributeManager(), _use_v8_geo_positions); + rc = static_cast<bool>(fieldWriter); + } + } else if (overrideName == "geopos") { + if (has_attribute_manager()) { + fieldWriter = GeoPositionDFW::create(argument.c_str(), getEnvironment().getAttributeManager(), _use_v8_geo_positions); + rc = static_cast<bool>(fieldWriter); + } + } else if (overrideName == "attribute") { + if (has_attribute_manager()) { + fieldWriter = AttributeDFWFactory::create(*getEnvironment().getAttributeManager(), argument); + rc = true; // Allow missing attribute vector + } + } else if (overrideName == "attributecombiner") { + if (has_attribute_manager()) { + auto attr_ctx = getEnvironment().getAttributeManager()->createContext(); + const vespalib::string& source_field = argument.empty() ? fieldName : argument; + fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, false, std::shared_ptr<MatchingElementsFields>()); + rc = static_cast<bool>(fieldWriter); + } + } else if (overrideName == "matchedattributeelementsfilter") { + const vespalib::string& source_field = argument.empty() ? fieldName : argument; + if (has_attribute_manager()) { + auto attr_ctx = getEnvironment().getAttributeManager()->createContext(); + if (attr_ctx->getAttribute(source_field) != nullptr) { + fieldWriter = AttributeDFWFactory::create(*getEnvironment().getAttributeManager(), source_field, true, _matching_elems_fields); + } else { + fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, true, _matching_elems_fields); + } + rc = static_cast<bool>(fieldWriter); + } + } else if (overrideName == "matchedelementsfilter") { + const vespalib::string& source_field = argument.empty() ? fieldName : argument; + if (has_attribute_manager()) { + auto attr_ctx = getEnvironment().getAttributeManager()->createContext(); + fieldWriter = MatchedElementsFilterDFW::create(source_field,*attr_ctx, _matching_elems_fields); + rc = static_cast<bool>(fieldWriter); + } + } else if (overrideName == "documentid") { + fieldWriter = std::make_unique<DocumentIdDFW>(); + rc = true; + } else { + throw IllegalArgumentException("unknown override operation '" + overrideName + "' for field '" + fieldName + "'."); + } + return fieldWriter; +} + +} diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.h b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.h new file mode 100644 index 00000000000..b4f28524eba --- /dev/null +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.h @@ -0,0 +1,30 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "i_docsum_field_writer_factory.h" + +namespace search { class MatchingElementsFields; } + +namespace search::docsummary { + +class IDocsumEnvironment; + +/* + * Factory class for creating docsum field writers. + */ +class DocsumFieldWriterFactory : public IDocsumFieldWriterFactory +{ + bool _use_v8_geo_positions; + IDocsumEnvironment& _env; +protected: + std::shared_ptr<MatchingElementsFields> _matching_elems_fields; + IDocsumEnvironment& getEnvironment() const noexcept { return _env; } + bool has_attribute_manager() const noexcept; +public: + DocsumFieldWriterFactory(bool use_v8_geo_positions, IDocsumEnvironment& env); + ~DocsumFieldWriterFactory() override; + std::unique_ptr<DocsumFieldWriter> create_docsum_field_writer(const vespalib::string& fieldName, const vespalib::string& overrideName, const vespalib::string& argument, bool& rc) override; +}; + +} diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp index 457d11e8f4b..0c2adcbfaa5 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp @@ -1,20 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "docsumconfig.h" -#include "attribute_combiner_dfw.h" -#include "copy_dfw.h" +#include "docsum_field_writer_factory.h" #include "docsumwriter.h" -#include "document_id_dfw.h" -#include "empty_dfw.h" -#include "geoposdfw.h" -#include "idocsumenvironment.h" -#include "juniperdfw.h" -#include "matched_elements_filter_dfw.h" -#include "positionsdfw.h" -#include "rankfeaturesdfw.h" -#include "summaryfeaturesdfw.h" -#include <vespa/searchlib/common/matching_elements_fields.h> -#include <vespa/vespalib/util/stringfmt.h> #include <vespa/vespalib/util/exceptions.h> namespace search::docsummary { @@ -27,99 +15,20 @@ DynamicDocsumConfig::getResultConfig() const { return *_writer->GetResultConfig(); } -std::unique_ptr<DocsumFieldWriter> -DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string & overrideName, const string & argument, bool & rc, std::shared_ptr<MatchingElementsFields> matching_elems_fields) +std::unique_ptr<IDocsumFieldWriterFactory> +DynamicDocsumConfig::make_docsum_field_writer_factory() { - const ResultConfig & resultConfig = getResultConfig(); - rc = false; - std::unique_ptr<DocsumFieldWriter> fieldWriter; - if (overrideName == "dynamicteaser") { - if ( ! argument.empty() ) { - auto fw = std::make_unique<DynamicTeaserDFW>(getEnvironment()->getJuniper()); - auto fw_ptr = fw.get(); - fieldWriter = std::move(fw); - rc = fw_ptr->Init(fieldName.c_str(), argument); - } else { - throw IllegalArgumentException("Missing argument"); - } - } else if (overrideName == "summaryfeatures") { - fieldWriter = std::make_unique<SummaryFeaturesDFW>(getEnvironment()); - rc = true; - } else if (overrideName == "rankfeatures") { - fieldWriter = std::make_unique<RankFeaturesDFW>(getEnvironment()); - rc = true; - } else if (overrideName == "empty") { - fieldWriter = std::make_unique<EmptyDFW>(); - rc = true; - } else if (overrideName == "copy") { - if ( ! argument.empty() ) { - fieldWriter = std::make_unique<CopyDFW>(argument); - rc = true; - } else { - throw IllegalArgumentException("Missing argument"); - } - } else if (overrideName == "absdist") { - if (getEnvironment()) { - fieldWriter = AbsDistanceDFW::create(argument.c_str(), getEnvironment()->getAttributeManager()); - rc = static_cast<bool>(fieldWriter); - } - } else if (overrideName == "positions") { - if (getEnvironment()) { - fieldWriter = PositionsDFW::create(argument.c_str(), getEnvironment()->getAttributeManager(), resultConfig.useV8geoPositions()); - rc = static_cast<bool>(fieldWriter); - } - } else if (overrideName == "geopos") { - if (getEnvironment()) { - fieldWriter = GeoPositionDFW::create(argument.c_str(), getEnvironment()->getAttributeManager(), resultConfig.useV8geoPositions()); - rc = static_cast<bool>(fieldWriter); - } - } else if (overrideName == "attribute") { - if (getEnvironment() && getEnvironment()->getAttributeManager()) { - fieldWriter = AttributeDFWFactory::create(*getEnvironment()->getAttributeManager(), argument); - rc = true; // Allow missing attribute vector - } - } else if (overrideName == "attributecombiner") { - if (getEnvironment() && getEnvironment()->getAttributeManager()) { - auto attr_ctx = getEnvironment()->getAttributeManager()->createContext(); - const string& source_field = argument.empty() ? fieldName : argument; - fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, false, std::shared_ptr<MatchingElementsFields>()); - rc = static_cast<bool>(fieldWriter); - } - } else if (overrideName == "matchedattributeelementsfilter") { - const string& source_field = argument.empty() ? fieldName : argument; - if (getEnvironment() && getEnvironment()->getAttributeManager()) { - auto attr_ctx = getEnvironment()->getAttributeManager()->createContext(); - if (attr_ctx->getAttribute(source_field) != nullptr) { - fieldWriter = AttributeDFWFactory::create(*getEnvironment()->getAttributeManager(), source_field, true, matching_elems_fields); - } else { - fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, true, matching_elems_fields); - } - rc = static_cast<bool>(fieldWriter); - } - } else if (overrideName == "matchedelementsfilter") { - const string& source_field = argument.empty() ? fieldName : argument; - if (getEnvironment() && getEnvironment()->getAttributeManager()) { - auto attr_ctx = getEnvironment()->getAttributeManager()->createContext(); - fieldWriter = MatchedElementsFilterDFW::create(source_field,*attr_ctx, matching_elems_fields); - rc = static_cast<bool>(fieldWriter); - } - } else if (overrideName == "documentid") { - fieldWriter = std::make_unique<DocumentIdDFW>(); - rc = true; - } else { - throw IllegalArgumentException("unknown override operation '" + overrideName + "' for field '" + fieldName + "'."); - } - return fieldWriter; + return std::make_unique<DocsumFieldWriterFactory>(getResultConfig().useV8geoPositions(), getEnvironment()); } void DynamicDocsumConfig::configure(const vespa::config::search::SummarymapConfig &cfg) { std::vector<string> strCfg; - auto matching_elems_fields = std::make_shared<MatchingElementsFields>(); + auto docsum_field_writer_factory = make_docsum_field_writer_factory(); for (const auto & o : cfg.override) { bool rc(false); - std::unique_ptr<DocsumFieldWriter> fieldWriter = createFieldWriter(o.field, o.command, o.arguments, rc, matching_elems_fields); + auto fieldWriter = docsum_field_writer_factory->create_docsum_field_writer(o.field, o.command, o.arguments, rc); if (rc && fieldWriter) { rc = _writer->Override(o.field.c_str(), std::move(fieldWriter)); // OBJECT HAND-OVER } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h index cb337f7f3d3..40c4e134bbc 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h @@ -8,6 +8,7 @@ namespace search { class MatchingElementsFields; } namespace search::docsummary { class IDocsumEnvironment; +class IDocsumFieldWriterFactory; class DocsumFieldWriter; class DynamicDocsumWriter; class ResultConfig; @@ -15,7 +16,7 @@ class ResultConfig; class DynamicDocsumConfig { public: - DynamicDocsumConfig(IDocsumEnvironment * env, DynamicDocsumWriter * writer) : + DynamicDocsumConfig(IDocsumEnvironment& env, DynamicDocsumWriter * writer) : _env(env), _writer(writer) { } @@ -23,14 +24,12 @@ public: void configure(const vespa::config::search::SummarymapConfig &cfg); protected: using string = vespalib::string; - IDocsumEnvironment * getEnvironment() { return _env; } + IDocsumEnvironment& getEnvironment() { return _env; } const ResultConfig & getResultConfig() const; - virtual std::unique_ptr<DocsumFieldWriter> - createFieldWriter(const string & fieldName, const string & overrideName, - const string & argument, bool & rc, std::shared_ptr<MatchingElementsFields> matching_elems_fields); + virtual std::unique_ptr<IDocsumFieldWriterFactory> make_docsum_field_writer_factory(); private: - IDocsumEnvironment * _env; + IDocsumEnvironment& _env; DynamicDocsumWriter * _writer; }; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h index d3d09224f64..0ebcc20ef42 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h @@ -32,8 +32,8 @@ class DocsumFieldWriterState; class GetDocsumsStateCallback { public: - virtual void FillSummaryFeatures(GetDocsumsState * state, IDocsumEnvironment * env) = 0; - virtual void FillRankFeatures(GetDocsumsState * state, IDocsumEnvironment * env) = 0; + virtual void FillSummaryFeatures(GetDocsumsState& state) = 0; + virtual void FillRankFeatures(GetDocsumsState& state) = 0; virtual std::unique_ptr<MatchingElements> fill_matching_elements(const MatchingElementsFields &matching_elems_fields) = 0; virtual ~GetDocsumsStateCallback() = default; GetDocsumsStateCallback(const GetDocsumsStateCallback &) = delete; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp index 27e8ecea4ca..d911ac562c2 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp @@ -4,31 +4,21 @@ #include "docsumstate.h" #include "docsum_field_writer_state.h" #include "i_docsum_store_document.h" +#include "keywordextractor.h" #include <vespa/document/fieldvalue/fieldvalue.h> -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> #include <vespa/searchlib/attribute/iattributemanager.h> -#include <vespa/vespalib/data/slime/slime.h> #include <vespa/vespalib/util/issue.h> +#include <vespa/vespalib/data/slime/inserter.h> #include <vespa/log/log.h> LOG_SETUP(".searchlib.docsummary.docsumwriter"); -using namespace vespalib::slime::convenience; using vespalib::Issue; +using vespalib::slime::ObjectInserter; +using vespalib::Memory; namespace search::docsummary { -uint32_t -IDocsumWriter::slime2RawBuf(const Slime & slime, RawBuf & buf) -{ - const uint32_t preUsed = buf.GetUsedLen(); - const uint32_t magic = SLIME_MAGIC_ID; - buf.append(&magic, sizeof(magic)); - SlimeOutputRawBufAdapter adapter(buf); - vespalib::slime::BinaryFormat::encode(slime, adapter); - return (buf.GetUsedLen() - preUsed); -} - DynamicDocsumWriter::ResolveClassInfo DynamicDocsumWriter::resolveClassInfo(vespalib::stringref outputClassName) const { @@ -60,7 +50,7 @@ DynamicDocsumWriter::resolveOutputClass(vespalib::stringref summaryClass) const void DynamicDocsumWriter::insertDocsum(const ResolveClassInfo & rci, uint32_t docid, GetDocsumsState *state, - IDocsumStore *docinfos, vespalib::slime::Inserter& topInserter) + IDocsumStore *docinfos, Inserter& topInserter) { if (rci.mustSkip || rci.outputClass == nullptr) { // Use empty docsum when illegal docsum class has been requested @@ -153,7 +143,7 @@ DynamicDocsumWriter::Override(const char *fieldName, std::unique_ptr<DocsumField void -DynamicDocsumWriter::InitState(IAttributeManager & attrMan, GetDocsumsState *state) +DynamicDocsumWriter::InitState(const IAttributeManager & attrMan, GetDocsumsState *state) { state->_kwExtractor = _keywordExtractor.get(); state->_attrCtx = attrMan.createContext(); @@ -171,14 +161,11 @@ DynamicDocsumWriter::InitState(IAttributeManager & attrMan, GetDocsumsState *sta } -uint32_t -DynamicDocsumWriter::WriteDocsum(uint32_t docid, GetDocsumsState *state, IDocsumStore *docinfos, search::RawBuf *target) +void +DynamicDocsumWriter::WriteDocsum(uint32_t docid, GetDocsumsState *state, IDocsumStore *docinfos, Inserter& inserter) { - vespalib::Slime slime; - vespalib::slime::SlimeInserter inserter(slime); ResolveClassInfo rci = resolveClassInfo(state->_args.getResultClassName()); insertDocsum(rci, docid, state, docinfos, inserter); - return slime2RawBuf(slime, *target); } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.h index bea6a747f84..ac0d461ab81 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.h @@ -6,23 +6,26 @@ #include "resultclass.h" #include "resultconfig.h" #include "docsumstore.h" -#include "keywordextractor.h" #include "docsum_field_writer.h" -#include <vespa/searchlib/util/rawbuf.h> #include <vespa/fastlib/text/unicodeutil.h> #include <vespa/fastlib/text/wordfolder.h> -namespace search { class IAttributeManager; } +namespace search { + class IAttributeManager; +} namespace vespalib { class Slime; } namespace search::docsummary { +class KeywordExtractor; + static constexpr uint32_t SLIME_MAGIC_ID = 0x55555555; class IDocsumWriter { public: + using Inserter = vespalib::slime::Inserter; struct ResolveClassInfo { bool mustSkip; bool allGenerated; @@ -34,14 +37,12 @@ public: }; virtual ~IDocsumWriter() = default; - virtual void InitState(search::IAttributeManager & attrMan, GetDocsumsState *state) = 0; - virtual uint32_t WriteDocsum(uint32_t docid, GetDocsumsState *state, - IDocsumStore *docinfos, search::RawBuf *target) = 0; + virtual void InitState(const search::IAttributeManager & attrMan, GetDocsumsState *state) = 0; + virtual void WriteDocsum(uint32_t docid, GetDocsumsState *state, + IDocsumStore *docinfos, Inserter & target) = 0; virtual void insertDocsum(const ResolveClassInfo & rci, uint32_t docid, GetDocsumsState *state, - IDocsumStore *docinfos, vespalib::slime::Inserter & target) = 0; + IDocsumStore *docinfos, Inserter & target) = 0; virtual ResolveClassInfo resolveClassInfo(vespalib::stringref outputClassName) const = 0; - - static uint32_t slime2RawBuf(const vespalib::Slime & slime, RawBuf & buf); }; //-------------------------------------------------------------------------- @@ -66,12 +67,12 @@ public: const ResultConfig *GetResultConfig() { return _resultConfig.get(); } bool Override(const char *fieldName, std::unique_ptr<DocsumFieldWriter> writer); - void InitState(search::IAttributeManager & attrMan, GetDocsumsState *state) override; - uint32_t WriteDocsum(uint32_t docid, GetDocsumsState *state, - IDocsumStore *docinfos, search::RawBuf *target) override; + void InitState(const search::IAttributeManager & attrMan, GetDocsumsState *state) override; + void WriteDocsum(uint32_t docid, GetDocsumsState *state, + IDocsumStore *docinfos, Inserter & inserter) override; void insertDocsum(const ResolveClassInfo & outputClassInfo, uint32_t docid, GetDocsumsState *state, - IDocsumStore *docinfos, vespalib::slime::Inserter & target) override; + IDocsumStore *docinfos, Inserter & inserter) override; ResolveClassInfo resolveClassInfo(vespalib::stringref outputClassName) const override; }; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index f7762408904..24558dd97e8 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -4,7 +4,7 @@ #include "docsumwriter.h" #include "docsumstate.h" #include "i_docsum_store_document.h" -#include <vespa/document/fieldvalue/fieldvalue.h> +#include "keywordextractor.h" #include <vespa/searchlib/parsequery/stackdumpiterator.h> #include <vespa/searchlib/queryeval/split_float.h> #include <vespa/vespalib/objects/hexdump.h> diff --git a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp index 975fd7f0a6a..474f329799b 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp @@ -101,7 +101,7 @@ GeoPositionDFW::insertField(uint32_t docid, GetDocsumsState * dsState, ResType, GeoPositionDFW::UP GeoPositionDFW::create(const char *attribute_name, - IAttributeManager *attribute_manager, + const IAttributeManager *attribute_manager, bool useV8geoPositions) { GeoPositionDFW::UP ret; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h index db43592c0b4..1bc8b523160 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h @@ -17,7 +17,7 @@ public: typedef std::unique_ptr<GeoPositionDFW> UP; GeoPositionDFW(const vespalib::string & attrName, bool useV8geoPositions); void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) const override; - static UP create(const char *attribute_name, IAttributeManager *attribute_manager, bool useV8geoPositions); + static UP create(const char *attribute_name, const IAttributeManager *attribute_manager, bool useV8geoPositions); }; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_field_writer_factory.h b/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_field_writer_factory.h new file mode 100644 index 00000000000..927fef26d1a --- /dev/null +++ b/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_field_writer_factory.h @@ -0,0 +1,22 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <memory> +#include <vespa/vespalib/stllike/string.h> + +namespace search::docsummary { + +class DocsumFieldWriter; + +/* + * Factory interface class for creating docsum field writers. + */ +class IDocsumFieldWriterFactory +{ +public: + virtual ~IDocsumFieldWriterFactory() = default; + virtual std::unique_ptr<DocsumFieldWriter> create_docsum_field_writer(const vespalib::string& fieldName, const vespalib::string& overrideName, const vespalib::string& argument, bool& rc) = 0; +}; + +} diff --git a/searchsummary/src/vespa/searchsummary/docsummary/idocsumenvironment.h b/searchsummary/src/vespa/searchsummary/docsummary/idocsumenvironment.h index bc6a347590a..1e9f550ac6d 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/idocsumenvironment.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/idocsumenvironment.h @@ -12,10 +12,10 @@ namespace search::docsummary { **/ class IDocsumEnvironment { public: - virtual search::IAttributeManager * getAttributeManager() = 0; + virtual const search::IAttributeManager * getAttributeManager() const = 0; virtual vespalib::string lookupIndex(const vespalib::string & s) const = 0; virtual juniper::Juniper * getJuniper() = 0; - virtual ~IDocsumEnvironment() {} + virtual ~IDocsumEnvironment() = default; }; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp index e97017e79c4..8b544eb09f6 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp @@ -131,99 +131,4 @@ KeywordExtractor::IsLegalIndex(vespalib::stringref idxS) const IsLegalIndexName(resolvedIdxName.c_str())); } - -char * -KeywordExtractor::ExtractKeywords(vespalib::stringref buf) const -{ - search::SimpleQueryStackDumpIterator si(buf); - char keywordstore[4_Ki]; // Initial storage for keywords buffer - search::RawBuf keywords(keywordstore, sizeof(keywordstore)); - - while (si.next()) { - search::ParseItem::ItemCreator creator = si.getCreator(); - switch (si.getType()) { - case search::ParseItem::ITEM_NOT: - /** - * @todo Must consider only the first argument on the stack. - * Difficult without recursion. - */ - break; - - case search::ParseItem::ITEM_PHRASE: - { - // Must take the next arity TERMS and put together - bool phraseterms_was_added = false; - int phraseterms = si.getArity(); - for (int i = 0; i < phraseterms; i++) { - si.next(); - search::ParseItem::ItemType newtype = si.getType(); - if (newtype != search::ParseItem::ITEM_TERM && - newtype != search::ParseItem::ITEM_NUMTERM) - { - // stack syntax error - // LOG(debug, "Extracting keywords found a non-term in a phrase"); - // making a clean escape. - keywords.reset(); - goto iteratorloopend; - } else { - if (!IsLegalIndex(si.getIndexName())) - continue; - // Found a term - vespalib::stringref term = si.getTerm(); - search::ParseItem::ItemCreator term_creator = si.getCreator(); - if ( !term.empty() && useful(term_creator)) { - // Actual term to add - if (phraseterms_was_added) { - // Not the first term in the phrase - keywords += " "; - } else { - phraseterms_was_added = true; - } - - keywords.append(term.data(), term.size()); - } - } - } - if (phraseterms_was_added) { - // Terms was added, so 0-terminate the string - keywords.append("\0", 1); - } - - break; - } - case search::ParseItem::ITEM_PREFIXTERM: - case search::ParseItem::ITEM_SUBSTRINGTERM: - case search::ParseItem::ITEM_EXACTSTRINGTERM: - case search::ParseItem::ITEM_NUMTERM: - case search::ParseItem::ITEM_TERM: - if (!IsLegalIndex(si.getIndexName())) - continue; - { - // add a new keyword - vespalib::stringref term = si.getTerm(); - if ( !term.empty() && useful(creator)) { - // An actual string to add - keywords.append(term.data(), term.size()); - keywords.append("\0", 1); - } - } - break; - - default: - // Do nothing to AND, RANK, OR - break; - } - } - iteratorloopend: - // Add a 'blank' keyword - keywords.append("\0", 1); - - // Must now allocate a string and copy the data from the rawbuf - void *result = malloc(keywords.GetUsedLen()); - if (result != nullptr) { - memcpy(result, keywords.GetDrainPos(), keywords.GetUsedLen()); - } - return static_cast<char *>(result); -} - } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h index 11e8da1ac7b..9d6905d66d4 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h @@ -3,7 +3,6 @@ #pragma once #include <vespa/vespalib/stllike/hash_set.h> -#include <vespa/searchlib/util/rawbuf.h> namespace search::docsummary { @@ -25,12 +24,11 @@ public: private: typedef vespalib::hash_set<vespalib::string> Set; - IDocsumEnvironment *_env; - std::vector<IndexPrefix> _legalPrefixes; - Set _legalIndexes; + IDocsumEnvironment *_env; + std::vector<IndexPrefix> _legalPrefixes; + Set _legalIndexes; - bool IsLegalIndexPrefix(const char *idxName) const - { + bool IsLegalIndexPrefix(const char *idxName) const { for (auto& prefix : _legalPrefixes ) { if (prefix.Match(idxName)) { return true; @@ -39,6 +37,13 @@ private: return false; } + void AddLegalIndexPrefix(const char *prefix) { + _legalPrefixes.emplace_back(prefix); + } + + void AddLegalIndexName(const char *idxName) { + _legalIndexes.insert(idxName); + } bool IsLegalIndexName(const char *idxName) const; public: explicit KeywordExtractor(IDocsumEnvironment * env); @@ -48,28 +53,6 @@ public: /** - * Add a prefix to the set of legal index name prefixes. - * - * @param prefix the index name prefix to add. - **/ - void AddLegalIndexPrefix(const char *prefix) - { - _legalPrefixes.emplace_back(prefix); - } - - - /** - * Add a name to the set of legal index names. - * - * @param idxName the index name to add. - **/ - void AddLegalIndexName(const char *idxName) - { - _legalIndexes.insert(idxName); - } - - - /** * Parse the input string as a ';' separated list of index names and * index name prefixes. A '*' following a token in the list denotes * that the token is an index name prefix. Add the index names and @@ -98,27 +81,6 @@ public: * @return true if the given index name is legal. **/ bool IsLegalIndex(vespalib::stringref idx) const; - - - /** - * Extract keywords from a stack dump of a SimpleQueryStack. - * - * The words are extracted as follows: For AND and OR operators, all - * TERM items occuring in a legal index (the set of legal indexes is - * defined by invoking the @ref AddLegalIndex and @ref - * AddLegalIndexPrefix methods) are extracted. - * - * For PHRASE operators, the TERMS in a phrase are put together with - * space between them. - * - * @todo For NOT operators, only the first operand is considered. - * - * @param buf Pointer to buffer with simple query stack dump. - * @param bufLen Length of stack dump buffer - * @return Pointer to a buffer containing zero-terminated keywords, - * with an empty word at the end. - */ - char *ExtractKeywords(vespalib::stringref buf) const; }; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp index aa7db0e2745..1000fee8423 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp @@ -252,7 +252,7 @@ PositionsDFW::insertField(uint32_t docid, GetDocsumsState * dsState, ResType typ //-------------------------------------------------------------------------- -PositionsDFW::UP PositionsDFW::create(const char *attribute_name, IAttributeManager *attribute_manager, bool useV8geoPositions) { +PositionsDFW::UP PositionsDFW::create(const char *attribute_name, const IAttributeManager *attribute_manager, bool useV8geoPositions) { PositionsDFW::UP ret; if (attribute_manager != nullptr) { if (!attribute_name) { @@ -274,7 +274,7 @@ PositionsDFW::UP PositionsDFW::create(const char *attribute_name, IAttributeMana } std::unique_ptr<DocsumFieldWriter> -AbsDistanceDFW::create(const char *attribute_name, IAttributeManager *attribute_manager) { +AbsDistanceDFW::create(const char *attribute_name, const IAttributeManager *attribute_manager) { std::unique_ptr<DocsumFieldWriter> ret; if (attribute_manager != nullptr) { if (!attribute_name) { diff --git a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h index c0d9d7d8111..d0a38d1004e 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h @@ -46,7 +46,7 @@ public: void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) const override; - static std::unique_ptr<DocsumFieldWriter> create(const char *attribute_name, IAttributeManager *index_man); + static std::unique_ptr<DocsumFieldWriter> create(const char *attribute_name, const IAttributeManager *index_man); }; @@ -61,7 +61,7 @@ public: PositionsDFW(const vespalib::string & attrName, bool useV8geoPositions); bool IsGenerated() const override { return true; } void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) const override; - static UP create(const char *attribute_name, IAttributeManager *index_man, bool useV8geoPositions); + static UP create(const char *attribute_name, const IAttributeManager *index_man, bool useV8geoPositions); }; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp index 5b08020c010..b7b10d9c1ea 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp @@ -7,9 +7,7 @@ namespace search::docsummary { -RankFeaturesDFW::RankFeaturesDFW(IDocsumEnvironment * env) : - _env(env) -{ } +RankFeaturesDFW::RankFeaturesDFW() = default; RankFeaturesDFW::~RankFeaturesDFW() = default; @@ -18,7 +16,7 @@ RankFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType, vespalib::slime::Inserter &target) const { if ( !state->_rankFeatures ) { - state->_callback.FillRankFeatures(state, _env); + state->_callback.FillRankFeatures(*state); if (state->_rankFeatures.get() == nullptr) { // still no rank features to write return; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h index d0516f9f0b7..023d5ad158f 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h @@ -10,11 +10,8 @@ class IDocsumEnvironment; class RankFeaturesDFW : public SimpleDFW { -private: - IDocsumEnvironment * _env; - public: - RankFeaturesDFW(IDocsumEnvironment * env); + RankFeaturesDFW(); RankFeaturesDFW(const RankFeaturesDFW &) = delete; RankFeaturesDFW & operator=(const RankFeaturesDFW &) = delete; ~RankFeaturesDFW() override; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/res_config_entry.cpp b/searchsummary/src/vespa/searchsummary/docsummary/res_config_entry.cpp new file mode 100644 index 00000000000..668fb9b519b --- /dev/null +++ b/searchsummary/src/vespa/searchsummary/docsummary/res_config_entry.cpp @@ -0,0 +1,16 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "res_config_entry.h" + +namespace search::docsummary { + +ResConfigEntry::ResConfigEntry() noexcept + : _type(RES_BAD), + _bindname(), + _enumValue(0) +{ +} + +ResConfigEntry::~ResConfigEntry() = default; + +} diff --git a/searchsummary/src/vespa/searchsummary/docsummary/res_config_entry.h b/searchsummary/src/vespa/searchsummary/docsummary/res_config_entry.h new file mode 100644 index 00000000000..771125b1f45 --- /dev/null +++ b/searchsummary/src/vespa/searchsummary/docsummary/res_config_entry.h @@ -0,0 +1,21 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "res_type.h" +#include <vespa/vespalib/stllike/string.h> + +namespace search::docsummary { + +/** + * This struct describes a single docsum field (name and type). + **/ +struct ResConfigEntry { + ResType _type; + vespalib::string _bindname; + int _enumValue; + ResConfigEntry() noexcept; + ~ResConfigEntry(); +}; + +} diff --git a/searchsummary/src/vespa/searchsummary/docsummary/res_type.h b/searchsummary/src/vespa/searchsummary/docsummary/res_type.h index 02c9f1522a4..e86e0eeedc8 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/res_type.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/res_type.h @@ -24,7 +24,8 @@ enum ResType { RES_LONG_DATA, RES_JSONSTRING, RES_TENSOR, - RES_FEATUREDATA + RES_FEATUREDATA, + RES_BAD }; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.cpp b/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.cpp index 98cc8372ac1..f7a1aae7455 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.cpp @@ -22,8 +22,63 @@ ResTypeUtils::GetResTypeName(ResType type) case RES_JSONSTRING: return "jsonstring"; case RES_TENSOR: return "tensor"; case RES_FEATUREDATA: return "featuredata"; + default: return "unknown-type"; } - return "unknown-type"; +} + +ResType +ResTypeUtils::get_res_type(vespalib::stringref name) +{ + if (name == "integer") { + return RES_INT; + } + if (name == "short") { + return RES_SHORT; + } + if (name == "byte") { + return RES_BYTE; + } + if (name == "bool") { + return RES_BOOL; + } + if (name == "float") { + return RES_FLOAT; + } + if (name == "double") { + return RES_DOUBLE; + } + if (name == "int64") { + return RES_INT64; + } + if (name == "string") { + return RES_STRING; + } + if (name == "data") { + return RES_DATA; + } + if (name == "longstring") { + return RES_LONG_STRING; + } + if (name == "longdata") { + return RES_LONG_DATA; + } + if (name == "jsonstring") { + return RES_JSONSTRING; + } + if (name == "tensor") { + return RES_TENSOR; + } + if (name == "featuredata") { + return RES_FEATUREDATA; + } + // Known aliases + if (name == "raw") { + return RES_DATA; + } + if (name == "xmlstring") { + return RES_JSONSTRING; + } + return RES_BAD; } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.h b/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.h index 9d73b7dc3fd..a2e881b5b4d 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/res_type_utils.h @@ -3,6 +3,7 @@ #pragma once #include "res_type.h" +#include <vespa/vespalib/stllike/string.h> namespace search::docsummary { @@ -16,6 +17,8 @@ struct ResTypeUtils * @param resType enum value of a result field type. **/ static const char *GetResTypeName(ResType type); + + static ResType get_res_type(vespalib::stringref name); }; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h index 5df9ebebdf0..7fb94f48ac3 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h @@ -2,8 +2,7 @@ #pragma once -#include "res_type.h" -#include <vespa/searchlib/util/rawbuf.h> +#include "res_config_entry.h" #include <vespa/vespalib/stllike/string.h> #include <vespa/vespalib/stllike/hash_map.h> #include <vespa/searchlib/util/stringenum.h> @@ -11,16 +10,6 @@ namespace search::docsummary { /** - * This struct describes a single docsum field (name and type). - **/ -struct ResConfigEntry { - ResType _type; - vespalib::string _bindname; - int _enumValue; -}; - - -/** * This class represents a specific docsum format (docsum class). It * contains an array of ResConfigEntry instances (config * entries). It also contains methods for mapping both diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp index 85d197f799a..f5e4c5d34cf 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp @@ -129,39 +129,10 @@ ResultConfig::ReadConfig(const vespa::config::search::SummaryConfig &cfg, const for (unsigned int j = 0; rc && (j < cfg_class.fields.size()); j++) { const char *fieldtype = cfg_class.fields[j].type.c_str(); const char *fieldname = cfg_class.fields[j].name.c_str(); + auto res_type = ResTypeUtils::get_res_type(fieldtype); LOG(debug, "Reconfiguring class '%s' field '%s' of type '%s'", cfg_class.name.c_str(), fieldname, fieldtype); - if (strcmp(fieldtype, "integer") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_INT); - } else if (strcmp(fieldtype, "short") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_SHORT); - } else if (strcmp(fieldtype, "bool") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_BOOL); - } else if (strcmp(fieldtype, "byte") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_BYTE); - } else if (strcmp(fieldtype, "float") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_FLOAT); - } else if (strcmp(fieldtype, "double") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_DOUBLE); - } else if (strcmp(fieldtype, "int64") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_INT64); - } else if (strcmp(fieldtype, "string") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_STRING); - } else if (strcmp(fieldtype, "data") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_DATA); - } else if (strcmp(fieldtype, "raw") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_DATA); - } else if (strcmp(fieldtype, "longstring") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_LONG_STRING); - } else if (strcmp(fieldtype, "longdata") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_LONG_DATA); - } else if (strcmp(fieldtype, "xmlstring") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_JSONSTRING); - } else if (strcmp(fieldtype, "jsonstring") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_JSONSTRING); - } else if (strcmp(fieldtype, "tensor") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_TENSOR); - } else if (strcmp(fieldtype, "featuredata") == 0) { - rc = resClass->AddConfigEntry(fieldname, RES_FEATUREDATA); + if (res_type != RES_BAD) { + rc = resClass->AddConfigEntry(fieldname, res_type); } else { LOG(error, "%s %s.fields[%d]: unknown type '%s'", configId, cfg_class.name.c_str(), j, fieldtype); rc = false; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp index f5fc942e40c..76bae0cee97 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp @@ -11,10 +11,7 @@ LOG_SETUP(".searchlib.docsummary.summaryfeaturesdfw"); namespace search::docsummary { -SummaryFeaturesDFW::SummaryFeaturesDFW(IDocsumEnvironment * env) : - _env(env) -{ -} +SummaryFeaturesDFW::SummaryFeaturesDFW() = default; SummaryFeaturesDFW::~SummaryFeaturesDFW() = default; @@ -27,7 +24,7 @@ SummaryFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType, return; } if ( ! state->_summaryFeatures) { - state->_callback.FillSummaryFeatures(state, _env); + state->_callback.FillSummaryFeatures(*state); if ( !state->_summaryFeatures) { // still no summary features to write return; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h index 45d7f7fa641..fd1092f840a 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h @@ -10,11 +10,8 @@ class IDocsumEnvironment; class SummaryFeaturesDFW : public SimpleDFW { -private: - IDocsumEnvironment * _env; - public: - SummaryFeaturesDFW(IDocsumEnvironment * env); + SummaryFeaturesDFW(); SummaryFeaturesDFW(const SummaryFeaturesDFW &) = delete; SummaryFeaturesDFW & operator=(const SummaryFeaturesDFW &) = delete; ~SummaryFeaturesDFW() override; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp index 218a9b82803..8bf78b90c77 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfieldconverter.cpp @@ -35,8 +35,8 @@ #include <vespa/vespalib/util/size_literals.h> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/vespalib/data/slime/slime.h> +#include <vespa/vespalib/data/smart_buffer.h> #include <vespa/vespalib/objects/nbostream.h> -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> #include <vespa/vespalib/util/exceptions.h> @@ -152,11 +152,11 @@ void handleIndexingTerms(Handler &handler, const StringFieldValue &value) { } } sort(terms.begin(), terms.end()); - SpanTermVector::const_iterator it = terms.begin(); - SpanTermVector::const_iterator ite = terms.end(); + auto it = terms.begin(); + auto ite = terms.end(); int32_t endPos = 0; for (; it != ite; ) { - SpanTermVector::const_iterator it_begin = it; + auto it_begin = it; if (it_begin->first.from() > endPos) { Span tmpSpan(endPos, it_begin->first.from() - endPos); handler.handleAnnotations(tmpSpan, it, it); @@ -584,10 +584,10 @@ public: SlimeInserter inserter(slime); SlimeFiller visitor(inserter, _tokenize, _matching_elems); input.accept(visitor); - search::RawBuf rbuf(4_Ki); - search::SlimeOutputRawBufAdapter adapter(rbuf); - vespalib::slime::BinaryFormat::encode(slime, adapter); - return std::make_unique<RawFieldValue>(rbuf.GetDrainPos(), rbuf.GetUsedLen()); + vespalib::SmartBuffer buffer(4_Ki); + vespalib::slime::BinaryFormat::encode(slime, buffer); + vespalib::Memory mem = buffer.obtain(); + return std::make_unique<RawFieldValue>(mem.data, mem.size); } }; diff --git a/searchsummary/src/vespa/searchsummary/test/mock_state_callback.h b/searchsummary/src/vespa/searchsummary/test/mock_state_callback.h index df035fca685..71c2be19bba 100644 --- a/searchsummary/src/vespa/searchsummary/test/mock_state_callback.h +++ b/searchsummary/src/vespa/searchsummary/test/mock_state_callback.h @@ -16,8 +16,8 @@ public: { } ~MockStateCallback() override { } - void FillSummaryFeatures(GetDocsumsState*, IDocsumEnvironment*) override { } - void FillRankFeatures(GetDocsumsState*, IDocsumEnvironment*) override { } + void FillSummaryFeatures(GetDocsumsState&) override { } + void FillRankFeatures(GetDocsumsState&) override { } std::unique_ptr<MatchingElements> fill_matching_elements(const search::MatchingElementsFields&) override { return std::make_unique<MatchingElements>(_matching_elems); } diff --git a/security-utils/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java b/security-utils/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java index ae6cef65156..240ec40adbf 100644 --- a/security-utils/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java +++ b/security-utils/src/main/java/com/yahoo/security/tls/TransportSecurityUtils.java @@ -117,7 +117,6 @@ public class TransportSecurityUtils { SystemTlsContext(Path tlsOptionsConfigFile) { super(tlsOptionsConfigFile, getInsecureAuthorizationMode()); } - - @Override public void close() { throw new UnsupportedOperationException("Shared TLS context cannot be closed"); } + @Override public void close() {} } } diff --git a/slobrok/src/Doxyfile b/slobrok/src/Doxyfile deleted file mode 100644 index 10727c87e68..00000000000 --- a/slobrok/src/Doxyfile +++ /dev/null @@ -1,228 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.4.7 - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -PROJECT_NAME = slobrok -PROJECT_NUMBER = -OUTPUT_DIRECTORY = ../doc/doxygen -CREATE_SUBDIRS = NO -OUTPUT_LANGUAGE = English -USE_WINDOWS_ENCODING = NO -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -STRIP_FROM_INC_PATH = -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = NO -MULTILINE_CPP_IS_BRIEF = NO -DETAILS_AT_TOP = NO -INHERIT_DOCS = YES -SEPARATE_MEMBER_PAGES = NO -TAB_SIZE = 8 -ALIASES = -OPTIMIZE_OUTPUT_FOR_C = NO -OPTIMIZE_OUTPUT_JAVA = NO -BUILTIN_STL_SUPPORT = NO -DISTRIBUTE_GROUP_DOC = NO -SUBGROUPING = YES -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL = YES -EXTRACT_PRIVATE = NO -EXTRACT_STATIC = NO -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_LOCAL_METHODS = NO -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = NO -CASE_SENSE_NAMES = YES -HIDE_SCOPE_NAMES = NO -SHOW_INCLUDE_FILES = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = YES -SORT_BRIEF_DOCS = NO -SORT_BY_SCOPE_NAME = YES -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 30 -SHOW_USED_FILES = YES -SHOW_DIRECTORIES = YES -FILE_VERSION_FILTER = -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES -WARN_NO_PARAMDOC = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = -FILE_PATTERNS = -RECURSIVE = YES -EXCLUDE = regress -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = tstdst* \ - sbcmd* \ - check_slobrok* -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = NO -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = YES -REFERENCES_RELATION = YES -REFERENCES_LINK_SOURCE = YES -USE_HTAGS = NO -VERBATIM_HEADERS = YES -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = NO -COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -HTML_HEADER = -HTML_FOOTER = -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -BINARY_TOC = NO -TOC_EXPAND = NO -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = NO -TREEVIEW_WIDTH = 250 -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = YES -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = NO -USE_PDFLATEX = NO -LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = -XML_PROGRAMLISTING = YES -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- -TAGFILES = ../../vespalib/doc/doxygen/vespalib.tag=../vespalib -GENERATE_TAGFILE = ../doc/doxygen/slobrok.tag -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -HIDE_UNDOC_RELATIONS = YES -HAVE_DOT = YES -CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -GROUP_GRAPHS = YES -UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = YES -CALL_GRAPH = YES -CALLER_GRAPH = NO -GRAPHICAL_HIERARCHY = YES -DIRECTORY_GRAPH = YES -DOT_IMAGE_FORMAT = png -DOT_PATH = -DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1024 -MAX_DOT_GRAPH_DEPTH = 0 -DOT_TRANSPARENT = NO -DOT_MULTI_TARGETS = NO -GENERATE_LEGEND = YES -DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO diff --git a/storage/src/Doxyfile b/storage/src/Doxyfile deleted file mode 100644 index 0ae14d0acc1..00000000000 --- a/storage/src/Doxyfile +++ /dev/null @@ -1,994 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.2.18 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# General configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Storage - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../doc - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these class will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower case letters. If set to YES upper case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are adviced to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explict @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# reimplements. - -INHERIT_DOCS = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consist of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = storage - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl - -FILE_PATTERNS = *.h *.cpp - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet - -HTML_STYLESHEET = ../cpp/vespa_link.css - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output dir. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non empty doxygen will try to run -# the html help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the Html help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, -# or Internet explorer 4.0+). Note that for large projects the tree generation -# can take a very long time. In such cases it is better to disable this feature. -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimised for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assigments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_XML = NO - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tagfiles. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superceded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yield more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermedate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO - -# The CGI_NAME tag should be the name of the CGI script that -# starts the search engine (doxysearch) with the correct parameters. -# A script with this name will be generated by doxygen. - -CGI_NAME = search.cgi - -# The CGI_URL tag should be the absolute URL to the directory where the -# cgi binaries are located. See the documentation of your http daemon for -# details. - -CGI_URL = - -# The DOC_URL tag should be the absolute URL to the directory where the -# documentation is located. If left blank the absolute path to the -# documentation, with file:// prepended to it, will be used. - -DOC_URL = - -# The DOC_ABSPATH tag should be the absolute path to the directory where the -# documentation is located. If left blank the directory on the local machine -# will be used. - -DOC_ABSPATH = - -# The BIN_ABSPATH tag must point to the directory where the doxysearch binary -# is installed. - -BIN_ABSPATH = /usr/local/bin/ - -# The EXT_DOC_PATHS tag can be used to specify one or more paths to -# documentation generated for other projects. This allows doxysearch to search -# the documentation for these projects as well. - -EXT_DOC_PATHS = diff --git a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp index 4c1b1662f68..a5f5075a4d8 100644 --- a/storage/src/tests/persistence/filestorage/filestormanagertest.cpp +++ b/storage/src/tests/persistence/filestorage/filestormanagertest.cpp @@ -1966,6 +1966,7 @@ TEST_F(FileStorManagerTest, bucket_db_is_populated_from_provider_when_initialize getDummyPersistence().set_fake_bucket_set(buckets); c.manager->initialize_bucket_databases_from_provider(); + c.manager->complete_internal_initialization(); std::vector<std::pair<document::BucketId, api::BucketInfo>> from_db; auto populate_from_db = [&from_db](uint64_t key, auto& entry) { diff --git a/storage/src/vespa/storage/bucketdb/bucketmanager.h b/storage/src/vespa/storage/bucketdb/bucketmanager.h index 124acf1864c..8bd892e0f09 100644 --- a/storage/src/vespa/storage/bucketdb/bucketmanager.h +++ b/storage/src/vespa/storage/bucketdb/bucketmanager.h @@ -103,6 +103,8 @@ public: /** Get info for given bucket (Used for whitebox testing) */ StorBucketDatabase::Entry getBucketInfo(const document::Bucket &id) const; + void force_db_sweep_and_metric_update() { updateMetrics(true); } + private: friend struct BucketManagerTest; diff --git a/storage/src/vespa/storage/common/statusmetricconsumer.h b/storage/src/vespa/storage/common/statusmetricconsumer.h index 3da6bd3151a..337c3ea7ff0 100644 --- a/storage/src/vespa/storage/common/statusmetricconsumer.h +++ b/storage/src/vespa/storage/common/statusmetricconsumer.h @@ -34,6 +34,10 @@ public: const std::string& name = "status"); ~StatusMetricConsumer() override; + // Metric reporting requires the "vespa.content.metrics_api" capability + CapabilitySet required_capabilities() const noexcept override { + return CapabilitySet::of({ Capability::content_metrics_api() }); + } vespalib::string getReportContentType(const framework::HttpUrlPath&) const override; bool reportStatus(std::ostream& out, const framework::HttpUrlPath&) const override; void updateMetrics(const MetricLockGuard & guard) override; diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp index a9b7a727a5b..7139ab0eb41 100644 --- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp +++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp @@ -6,6 +6,7 @@ #include <vespa/vespalib/util/exceptions.h> #include <vespa/vespalib/util/size_literals.h> #include <vespa/vespalib/component/vtag.h> +#include <vespa/vespalib/net/connection_auth_context.h> #include <vespa/vespalib/net/crypto_engine.h> #include <vespa/config/subscription/configuri.h> #include <vespa/config/helper/configfetcher.hpp> @@ -45,15 +46,15 @@ StatusWebServer::~StatusWebServer() void StatusWebServer::configure(std::unique_ptr<vespa::config::content::core::StorStatusConfig> config) { int newPort = config->httpport; - // If server is already running, ignore config updates that doesn't - // alter port, or suggests random port. + // If server is already running, ignore config updates that doesn't + // alter port, or suggests random port. if (_httpServer) { if (newPort == 0 || newPort == _port) return; } - // Try to create new server before destroying old. + // Try to create new server before destroying old. LOG(info, "Starting status web server on port %u.", newPort); std::unique_ptr<WebServer> server; - // Negative port number means don't run the web server + // Negative port number means don't run the web server if (newPort >= 0) { try { server = std::make_unique<WebServer>(*this, newPort); @@ -146,6 +147,25 @@ StatusWebServer::getListenPort() const } void +StatusWebServer::invoke_reporter(const framework::StatusReporter& reporter, + const framework::HttpUrlPath& url_path, + vespalib::Portal::GetRequest& request) +{ + try { + std::ostringstream content; + auto content_type = reporter.getReportContentType(url_path); + if (reporter.reportStatus(content, url_path)) { + request.respond_with_content(content_type, content.str()); + } else { + request.respond_with_error(404, "Not Found"); + } + } catch (std::exception &e) { + LOG(warning, "Internal Server Error: %s", e.what()); + request.respond_with_error(500, "Internal Server Error"); + } +} + +void StatusWebServer::handlePage(const framework::HttpUrlPath& urlpath, vespalib::Portal::GetRequest request) { vespalib::string link(urlpath.getPath()); @@ -157,22 +177,25 @@ StatusWebServer::handlePage(const framework::HttpUrlPath& urlpath, vespalib::Por if ( ! link.empty()) { const framework::StatusReporter *reporter = _reporterMap.getStatusReporter(link); if (reporter != nullptr) { - try { - std::ostringstream content; - auto content_type = reporter->getReportContentType(urlpath); - if (reporter->reportStatus(content, urlpath)) { - request.respond_with_content(content_type, content.str()); - } else { - request.respond_with_error(404, "Not Found"); - } - } catch (std::exception &e) { - LOG(warning, "Internal Server Error: %s", e.what()); - request.respond_with_error(500, "Internal Server Error"); + const auto& auth_ctx = request.auth_context(); + if (auth_ctx.capabilities().contains_all(reporter->required_capabilities())) { + invoke_reporter(*reporter, urlpath, request); + } else { + // TODO should print peer address as well; not currently exposed + LOG(warning, "Peer with %s denied status page access to '%s' due to insufficient " + "credentials (had %s, needed %s)", + auth_ctx.peer_credentials().to_string().c_str(), + link.c_str(), auth_ctx.capabilities().to_string().c_str(), + reporter->required_capabilities().to_string().c_str()); + request.respond_with_error(403, "Forbidden"); } } else { request.respond_with_error(404, "Not Found"); } } else { + // TODO should the index page be capability-restricted? Would be a bit strange if the root + // index '/' page requires status capabilities but '/metrics' does not. + // The index page only leaks the Vespa version and node type (inferred by reporter set). IndexPageReporter indexRep; indexRep << "<p><b>Binary version of Vespa:</b> " << vespalib::Vtag::currentVersion.toString() diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h index 429f5249441..26db7ff5069 100644 --- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h +++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.h @@ -24,6 +24,7 @@ namespace config { namespace storage { namespace framework { + struct StatusReporter; struct StatusReporterMap; struct ThreadHandle; struct ComponentRegister; @@ -35,10 +36,10 @@ namespace framework { class StatusWebServer : private config::IFetcherCallback<vespa::config::content::core::StorStatusConfig> { class WebServer : public vespalib::Portal::GetHandler { - StatusWebServer& _status; - vespalib::Portal::SP _server; + StatusWebServer& _status; + vespalib::Portal::SP _server; vespalib::ThreadStackExecutor _executor; - vespalib::Portal::Token::UP _root; + vespalib::Portal::Token::UP _root; public: WebServer(StatusWebServer&, uint16_t port); @@ -81,6 +82,9 @@ public: int getListenPort() const; void handlePage(const framework::HttpUrlPath&, vespalib::Portal::GetRequest request); private: + void invoke_reporter(const framework::StatusReporter&, + const framework::HttpUrlPath&, + vespalib::Portal::GetRequest&); void configure(std::unique_ptr<vespa::config::content::core::StorStatusConfig> config) override; }; diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp index c7ee0ab97e0..63fec9f037f 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp @@ -1041,7 +1041,9 @@ void FileStorManager::initialize_bucket_databases_from_provider() { const double elapsed = start_time.getElapsedTimeAsDouble(); LOG(info, "Completed listing of %zu buckets in %.2g milliseconds", bucket_count, elapsed); _metrics->bucket_db_init_latency.addValue(elapsed); +} +void FileStorManager::complete_internal_initialization() { update_reported_state_after_db_init(); _init_handler.notifyDoneInitializing(); } diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h index 83f1826c498..6820ed6f451 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.h +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.h @@ -110,7 +110,12 @@ public: // By ensuring that this function is called prior to chain opening, this invariant // shall be upheld since no RPC/MessageBus endpoints have been made available // yet at that point in time. + // Must always be called _before_ complete_internal_initialization() void initialize_bucket_databases_from_provider(); + // Tag node internally as having completed initialization. Updates reported state + // (although this will not be communicated out of the process until the + // CommunicationManager thread has been fired up). + void complete_internal_initialization(); const FileStorMetrics& get_metrics() const { return *_metrics; } diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.cpp b/storage/src/vespa/storage/storageserver/servicelayernode.cpp index 1cb2334803e..b76e2cca02a 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.cpp +++ b/storage/src/vespa/storage/storageserver/servicelayernode.cpp @@ -33,6 +33,7 @@ ServiceLayerNode::ServiceLayerNode(const config::ConfigUri & configUri, ServiceL _context(context), _persistenceProvider(persistenceProvider), _externalVisitors(externalVisitors), + _bucket_manager(nullptr), _fileStorManager(nullptr), _init_has_been_called(false) { @@ -160,7 +161,9 @@ ServiceLayerNode::createChain(IStorageChainBuilder &builder) auto merge_throttler = merge_throttler_up.get(); builder.add(std::move(merge_throttler_up)); builder.add(std::make_unique<ChangedBucketOwnershipHandler>(_configUri, compReg)); - builder.add(std::make_unique<BucketManager>(_configUri, _context.getComponentRegister())); + auto bucket_manager = std::make_unique<BucketManager>(_configUri, _context.getComponentRegister()); + _bucket_manager = bucket_manager.get(); + builder.add(std::move(bucket_manager)); builder.add(std::make_unique<VisitorManager>(_configUri, _context.getComponentRegister(), static_cast<VisitorMessageSessionFactory &>(*this), _externalVisitors)); builder.add(std::make_unique<ModifiedBucketChecker>( _context.getComponentRegister(), _persistenceProvider, _configUri)); @@ -186,7 +189,20 @@ ServiceLayerNode::pause() void ServiceLayerNode::perform_post_chain_creation_init_steps() { assert(_fileStorManager); + assert(_bucket_manager); + // After initialization, the node will immediately start communicating with the cluster + // controller, exchanging host info. This host info contains a subset snapshot of the active + // metrics, which includes the total bucket count, doc count etc. It is critical that + // we must never report back host info _prior_ to having run at least one full sweep of + // the bucket database, lest we risk transiently reporting zero buckets held by the + // content node. Doing so could cause orchestration logic to perform operations based + // on erroneous assumptions. + // To avoid this, we explicitly force a full DB sweep and metric update prior to reporting + // the node as up. Since this function is called prior to the CommunicationManager thread + // being started, any CC health pings should also always happen after this init step. _fileStorManager->initialize_bucket_databases_from_provider(); + _bucket_manager->force_db_sweep_and_metric_update(); + _fileStorManager->complete_internal_initialization(); } } // storage diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.h b/storage/src/vespa/storage/storageserver/servicelayernode.h index f0189f943ab..4b0e0f73408 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.h +++ b/storage/src/vespa/storage/storageserver/servicelayernode.h @@ -18,6 +18,7 @@ namespace storage { namespace spi { struct PersistenceProvider; } +class BucketManager; class FileStorManager; class ServiceLayerNode @@ -31,6 +32,7 @@ class ServiceLayerNode // FIXME: Should probably use the fetcher in StorageNode std::unique_ptr<config::ConfigFetcher> _configFetcher; + BucketManager* _bucket_manager; FileStorManager* _fileStorManager; bool _init_has_been_called; diff --git a/storage/src/vespa/storageframework/generic/status/statusreporter.h b/storage/src/vespa/storageframework/generic/status/statusreporter.h index cc48bb841fd..3f84d5e8ae4 100644 --- a/storage/src/vespa/storageframework/generic/status/statusreporter.h +++ b/storage/src/vespa/storageframework/generic/status/statusreporter.h @@ -16,12 +16,15 @@ #include <ostream> #include <vespa/storageframework/generic/status/httpurlpath.h> +#include <vespa/vespalib/net/tls/capability_set.h> #include <vespa/vespalib/stllike/string.h> namespace storage::framework { -struct StatusReporter -{ +struct StatusReporter { + using Capability = vespalib::net::tls::Capability; + using CapabilitySet = vespalib::net::tls::CapabilitySet; + StatusReporter(vespalib::stringref id, vespalib::stringref name); virtual ~StatusReporter(); @@ -40,6 +43,16 @@ struct StatusReporter virtual bool isValidStatusRequest() const { return true; } /** + * By default, a status reporter requires the "vespa.content.status_pages" client capability. + * This can be overridden by subclasses to require reporter-specific capabilities + * (or none at all). If the client does not satisfy the required capabilities, a + * "403 Forbidden" error response will be returned to the client. + */ + virtual CapabilitySet required_capabilities() const noexcept { + return CapabilitySet::of({ Capability::content_status_pages() }); + } + + /** * Called to get content type. * An empty string indicates page not found. */ diff --git a/streamingvisitors/src/tests/docsum/docsum.cpp b/streamingvisitors/src/tests/docsum/docsum.cpp index 475489d2f5a..b7f45123c48 100644 --- a/streamingvisitors/src/tests/docsum/docsum.cpp +++ b/streamingvisitors/src/tests/docsum/docsum.cpp @@ -7,6 +7,8 @@ #include <vespa/vsm/common/docsum.h> #include <vespa/vsm/vsm/flattendocsumwriter.h> #include <vespa/vsm/vsm/slimefieldwriter.h> +#include <vespa/vespalib/data/smart_buffer.h> +#include <vespa/vespalib/data/slime/slime.h> using namespace document; @@ -30,18 +32,18 @@ private: public: TestDocument(const search::DocumentIdT & docId, size_t numFields) : vsm::Document(docId, numFields), _fields(numFields) {} - virtual bool setField(FieldIdT fId, document::FieldValue::UP fv) override { + bool setField(FieldIdT fId, document::FieldValue::UP fv) override { if (fId < _fields.size()) { _fields[fId].reset(fv.release()); return true; } return false; } - virtual const document::FieldValue * getField(FieldIdT fId) const override { + const document::FieldValue * getField(FieldIdT fId) const override { if (fId < _fields.size()) { return _fields[fId].get(); } - return NULL; + return nullptr; } }; @@ -105,12 +107,22 @@ DocsumTest::assertFlattenDocsumWriter(FlattenDocsumWriter & fdw, const FieldValu } void +convert(SlimeFieldWriter & sfw, const document::FieldValue & fv, vespalib::Output & output) +{ + vespalib::Slime slime; + vespalib::slime::SlimeInserter inserter(slime); + sfw.insert(fv, inserter); + vespalib::slime::BinaryFormat::encode(slime, output); +} + +void DocsumTest::assertSlimeFieldWriter(SlimeFieldWriter & sfw, const FieldValue & fv, const std::string & exp) { - sfw.convert(fv); + vespalib::SmartBuffer buffer(1024); + convert(sfw, fv, buffer); vespalib::Slime gotSlime; - vespalib::Memory serialized(sfw.out()); + vespalib::Memory serialized(buffer.obtain()); size_t decodeRes = vespalib::slime::BinaryFormat::decode(serialized, gotSlime); ASSERT_EQUAL(decodeRes, serialized.size); diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp index c2bbf4d09da..898860bdf73 100644 --- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp @@ -3,6 +3,7 @@ #include "querytermdata.h" #include "searchenvironment.h" #include "searchvisitor.h" +#include "matching_elements_filler.h" #include <vespa/persistence/spi/docentry.h> #include <vespa/document/datatype/positiondatatype.h> #include <vespa/document/datatype/documenttype.h> @@ -17,8 +18,8 @@ #include <vespa/vespalib/objects/nbostream.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/vespalib/util/size_literals.h> +#include <vespa/vespalib/data/slime/slime.h> #include <vespa/fnet/databuffer.h> -#include "matching_elements_filler.h" #include <vespa/log/log.h> LOG_SETUP(".visitor.instance.searchvisitor"); @@ -92,7 +93,7 @@ createMultiValueAttribute(const vespalib::string & name, const document::FieldVa LOG(debug, "Can not make an multivalue attribute out of %s with data type '%s' (%s)", name.c_str(), ndt->getName().c_str(), fv.className()); } - return AttributeVector::SP(); + return {}; } AttributeVector::SP @@ -108,7 +109,7 @@ createAttribute(const vespalib::string & name, const document::FieldValue & fv) } else { LOG(debug, "Can not make an attribute out of %s of type '%s'.", name.c_str(), fv.className()); } - return AttributeVector::SP(); + return {}; } SearchVisitor::SummaryGenerator::SummaryGenerator() : @@ -117,7 +118,7 @@ SearchVisitor::SummaryGenerator::SummaryGenerator() : _docsumState(_callback), _docsumFilter(), _docsumWriter(nullptr), - _rawBuf(4_Ki) + _buf(4_Ki) { } @@ -128,12 +129,20 @@ vespalib::ConstBufferRef SearchVisitor::SummaryGenerator::fillSummary(AttributeVector::DocId lid, const HitsAggregationResult::SummaryClassType & summaryClass) { if (_docsumWriter != nullptr) { - _rawBuf.reset(); _docsumState._args.setResultClassName(summaryClass); - uint32_t docsumLen = _docsumWriter->WriteDocsum(lid, &_docsumState, _docsumFilter.get(), &_rawBuf); - return vespalib::ConstBufferRef(_rawBuf.GetDrainPos(), docsumLen); + vespalib::Slime slime; + vespalib::slime::SlimeInserter inserter(slime); + _docsumWriter->WriteDocsum(lid, &_docsumState, _docsumFilter.get(), inserter); + + _buf.reset(); + vespalib::WritableMemory magicId = _buf.reserve(4); + memcpy(magicId.data, &search::docsummary::SLIME_MAGIC_ID, 4); + _buf.commit(4); + vespalib::slime::BinaryFormat::encode(slime, _buf); + vespalib::Memory mem = _buf.obtain(); + return {mem.data, mem.size}; } - return vespalib::ConstBufferRef(); + return {}; } void SearchVisitor::HitsResultPreparator::execute(vespalib::Identifiable & obj) @@ -612,10 +621,10 @@ SearchVisitor::registerAdditionalFields(const std::vector<vsm::DocsumTools::Fiel for (const vsm::DocsumTools::FieldSpec & spec : docsumSpec) { fieldList.push_back(spec.getOutputName()); const std::vector<vespalib::string> & inputNames = spec.getInputNames(); - for (size_t j = 0; j < inputNames.size(); ++j) { - fieldList.push_back(inputNames[j]); - if (PositionDataType::isZCurveFieldName(inputNames[j])) { - fieldList.emplace_back(PositionDataType::cutZCurveFieldName(inputNames[j])); + for (const auto & name : inputNames) { + fieldList.push_back(name); + if (PositionDataType::isZCurveFieldName(name)) { + fieldList.emplace_back(PositionDataType::cutZCurveFieldName(name)); } } } @@ -732,7 +741,7 @@ SearchVisitor::setupAttributeVectors() void SearchVisitor::setupAttributeVector(const FieldPath &fieldPath) { vespalib::string attrName(fieldPath.front().getName()); - for (FieldPath::const_iterator ft(fieldPath.begin() + 1), fmt(fieldPath.end()); ft != fmt; ft++) { + for (auto ft(fieldPath.begin() + 1), fmt(fieldPath.end()); ft != fmt; ft++) { attrName.append("."); attrName.append((*ft)->getName()); } @@ -855,7 +864,7 @@ private: bool SearchVisitor::compatibleDocumentTypes(const document::DocumentType& typeA, - const document::DocumentType& typeB) const + const document::DocumentType& typeB) { if (&typeA == &typeB) { return true; diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h index 20ab1ccf325..98aa6b89c9c 100644 --- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h +++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h @@ -18,6 +18,7 @@ #include <vespa/vsm/vsm/vsm-adapter.h> #include <vespa/vespalib/objects/objectoperation.h> #include <vespa/vespalib/objects/objectpredicate.h> +#include <vespa/vespalib/data/smart_buffer.h> #include <vespa/searchlib/query/streaming/query.h> #include <vespa/searchlib/aggregation/aggregation.h> #include <vespa/searchlib/attribute/attributemanager.h> @@ -44,7 +45,7 @@ public: SearchVisitor(storage::StorageComponent&, storage::VisitorEnvironment& vEnv, const vdslib::Parameters & params); - ~SearchVisitor(); + ~SearchVisitor() override; private: /** * This struct wraps an attribute vector. @@ -101,7 +102,7 @@ private: class PositionInserter : public AttributeInserter { public: PositionInserter(search::AttributeVector & attribute, search::AttributeVector::DocId docId); - ~PositionInserter(); + ~PositionInserter() override; private: void onPrimitive(uint32_t fid, const Content & c) override; void onStructStart(const Content & fv) override; @@ -128,9 +129,9 @@ private: /** * Process attribute hints and add needed attributes to the given list. **/ - void processHintedAttributes(const IndexEnvironment & indexEnv, bool rank, - const search::IAttributeManager & attrMan, - std::vector<AttrInfo> & attributeFields); + static void processHintedAttributes(const IndexEnvironment & indexEnv, bool rank, + const search::IAttributeManager & attrMan, + std::vector<AttrInfo> & attributeFields); public: RankController(); @@ -244,8 +245,8 @@ private: * @param docsumSpec config with the field names used by the docsum setup. * @param fieldList list of field names that are built. **/ - void registerAdditionalFields(const std::vector<vsm::DocsumTools::FieldSpec> & docsumSpec, - std::vector<vespalib::string> & fieldList); + static void registerAdditionalFields(const std::vector<vsm::DocsumTools::FieldSpec> & docsumSpec, + std::vector<vespalib::string> & fieldList); /** * Setup the field searchers used when matching the query with the stream of documents. @@ -301,8 +302,8 @@ private: DocEntryList& entries, HitCounter& hitCounter) override; - bool compatibleDocumentTypes(const document::DocumentType& typeA, - const document::DocumentType& typeB) const; + static bool compatibleDocumentTypes(const document::DocumentType& typeA, + const document::DocumentType& typeB); /** * Process one document @@ -369,7 +370,7 @@ private: class GroupingEntry : std::shared_ptr<Grouping> { public: - GroupingEntry(Grouping * grouping); + explicit GroupingEntry(Grouping * grouping); ~GroupingEntry(); void aggregate(const document::Document & doc, search::HitRank rank); const Grouping & operator * () const { return *_grouping; } @@ -387,32 +388,32 @@ private: { public: SummaryGenerator(); - ~SummaryGenerator(); + ~SummaryGenerator() override; GetDocsumsState & getDocsumState() { return _docsumState; } vsm::GetDocsumsStateCallback & getDocsumCallback() { return _callback; } void setFilter(std::unique_ptr<vsm::DocsumFilter> filter) { _docsumFilter = std::move(filter); } void setDocsumCache(const vsm::IDocSumCache & cache) { _docsumFilter->setDocSumStore(cache); } void setDocsumWriter(IDocsumWriter & docsumWriter) { _docsumWriter = & docsumWriter; } - virtual vespalib::ConstBufferRef fillSummary(search::AttributeVector::DocId lid, const HitsAggregationResult::SummaryClassType & summaryClass) override; + vespalib::ConstBufferRef fillSummary(search::AttributeVector::DocId lid, const HitsAggregationResult::SummaryClassType & summaryClass) override; private: vsm::GetDocsumsStateCallback _callback; GetDocsumsState _docsumState; std::unique_ptr<vsm::DocsumFilter> _docsumFilter; search::docsummary::IDocsumWriter * _docsumWriter; - search::RawBuf _rawBuf; + vespalib::SmartBuffer _buf; }; class HitsResultPreparator : public vespalib::ObjectOperation, public vespalib::ObjectPredicate { public: - HitsResultPreparator(SummaryGenerator & summaryGenerator) : + explicit HitsResultPreparator(SummaryGenerator & summaryGenerator) : _summaryGenerator(summaryGenerator), _numHitsAggregators(0) { } size_t getNumHitsAggregators() const { return _numHitsAggregators; } private: - virtual void execute(vespalib::Identifiable &obj) override; - virtual bool check(const vespalib::Identifiable &obj) const override; + void execute(vespalib::Identifiable &obj) override; + bool check(const vespalib::Identifiable &obj) const override; SummaryGenerator & _summaryGenerator; size_t _numHitsAggregators; }; @@ -461,7 +462,7 @@ class SearchVisitorFactory : public storage::VisitorFactory { storage::Visitor* makeVisitor(storage::StorageComponent&, storage::VisitorEnvironment&env, const vdslib::Parameters& params) override; public: - SearchVisitorFactory(const config::ConfigUri & configUri); + explicit SearchVisitorFactory(const config::ConfigUri & configUri); }; } diff --git a/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt b/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt index adc00b341a3..6afb61078c7 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt +++ b/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_add_library(vsm_vsmbase OBJECT SOURCES docsumfieldspec.cpp docsumfilter.cpp + docsum_field_writer_factory.cpp fieldsearchspec.cpp flattendocsumwriter.cpp slimefieldwriter.cpp diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp new file mode 100644 index 00000000000..c7ca9b52dc9 --- /dev/null +++ b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp @@ -0,0 +1,80 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "docsum_field_writer_factory.h" +#include <vespa/searchsummary/docsummary/copy_dfw.h> +#include <vespa/searchsummary/docsummary/docsum_field_writer.h> +#include <vespa/searchsummary/docsummary/empty_dfw.h> +#include <vespa/searchsummary/docsummary/matched_elements_filter_dfw.h> +#include <vespa/searchlib/common/matching_elements_fields.h> +#include <vespa/vsm/config/config-vsmfields.h> + +using search::MatchingElementsFields; +using search::docsummary::CopyDFW; +using search::docsummary::EmptyDFW; +using search::docsummary::IDocsumEnvironment; +using search::docsummary::DocsumFieldWriter; +using search::docsummary::MatchedElementsFilterDFW; +using vespa::config::search::vsm::VsmfieldsConfig; + +namespace vsm { + +namespace { + +void populate_fields(MatchingElementsFields& fields, VsmfieldsConfig& fields_config, const vespalib::string& field_name) +{ + vespalib::string prefix = field_name + "."; + for (const auto& spec : fields_config.fieldspec) { + if (spec.name.substr(0, prefix.size()) == prefix) { + fields.add_mapping(field_name, spec.name); + } + if (spec.name == field_name) { + fields.add_field(field_name); + } + } +} + +} + +DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, IDocsumEnvironment& env, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config) + : search::docsummary::DocsumFieldWriterFactory(use_v8_geo_positions, env), + _vsm_fields_config(vsm_fields_config) +{ +} + +DocsumFieldWriterFactory::~DocsumFieldWriterFactory() = default; + +std::unique_ptr<DocsumFieldWriter> +DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fieldName, const vespalib::string& overrideName, const vespalib::string& argument, bool& rc) +{ + std::unique_ptr<DocsumFieldWriter> fieldWriter; + if ((overrideName == "staticrank") || + (overrideName == "ranklog") || + (overrideName == "label") || + (overrideName == "project") || + (overrideName == "positions") || + (overrideName == "absdist") || + (overrideName == "subproject")) + { + fieldWriter = std::make_unique<EmptyDFW>(); + rc = true; + } else if ((overrideName == "attribute") || + (overrideName == "attributecombiner")) { + if (!argument.empty() && argument != fieldName) { + fieldWriter = std::make_unique<CopyDFW>(argument); + } + rc = true; + } else if (overrideName == "geopos") { + rc = true; + } else if ((overrideName == "matchedattributeelementsfilter") || + (overrideName == "matchedelementsfilter")) { + vespalib::string source_field = argument.empty() ? fieldName : argument; + populate_fields(*_matching_elems_fields, _vsm_fields_config, source_field); + fieldWriter = MatchedElementsFilterDFW::create(source_field, _matching_elems_fields); + rc = static_cast<bool>(fieldWriter); + } else { + return search::docsummary::DocsumFieldWriterFactory::create_docsum_field_writer(fieldName, overrideName, argument, rc); + } + return fieldWriter; +} + +} diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h new file mode 100644 index 00000000000..b8362c06f78 --- /dev/null +++ b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h @@ -0,0 +1,25 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/searchsummary/docsummary/docsum_field_writer_factory.h> +#include <vespa/vsm/config/config-vsmfields.h> + +namespace vsm { + +/* + * Factory interface class for creating docsum field writers, adjusted for + * streaming search. + */ +class DocsumFieldWriterFactory : public search::docsummary::DocsumFieldWriterFactory +{ + const vespa::config::search::vsm::VsmfieldsConfig& _vsm_fields_config; + +public: + DocsumFieldWriterFactory(bool use_v8_geo_positions, search::docsummary::IDocsumEnvironment& env, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config); + ~DocsumFieldWriterFactory() override; + std::unique_ptr<search::docsummary::DocsumFieldWriter> + create_docsum_field_writer(const vespalib::string& fieldName, const vespalib::string& overrideName, const vespalib::string& argument, bool& rc) override; +}; + +} diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.cpp index 5b9c73cb07d..7525477fb52 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.cpp @@ -1,80 +1,24 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vsm/vsm/docsumconfig.h> -#include <vespa/searchsummary/docsummary/copy_dfw.h> -#include <vespa/searchsummary/docsummary/empty_dfw.h> -#include <vespa/searchsummary/docsummary/matched_elements_filter_dfw.h> +#include "docsumconfig.h" #include <vespa/searchsummary/docsummary/resultconfig.h> -#include <vespa/searchlib/common/matching_elements_fields.h> #include <vespa/vsm/config/config-vsmfields.h> -#include <vespa/vsm/config/config-vsmsummary.h> +#include "docsum_field_writer_factory.h" -using search::MatchingElementsFields; -using search::docsummary::DocsumFieldWriter; -using search::docsummary::CopyDFW; -using search::docsummary::EmptyDFW; -using search::docsummary::MatchedElementsFilterDFW; -using search::docsummary::ResultConfig; using vespa::config::search::vsm::VsmfieldsConfig; -using vespa::config::search::vsm::VsmsummaryConfig; namespace vsm { -namespace { - -void populate_fields(MatchingElementsFields& fields, VsmfieldsConfig& fields_config, const vespalib::string& field_name) -{ - vespalib::string prefix = field_name + "."; - for (const auto& spec : fields_config.fieldspec) { - if (spec.name.substr(0, prefix.size()) == prefix) { - fields.add_mapping(field_name, spec.name); - } - if (spec.name == field_name) { - fields.add_field(field_name); - } - } -} - -} - -DynamicDocsumConfig::DynamicDocsumConfig(search::docsummary::IDocsumEnvironment* env, search::docsummary::DynamicDocsumWriter* writer, std::shared_ptr<VsmfieldsConfig> vsm_fields_config) +DynamicDocsumConfig::DynamicDocsumConfig(search::docsummary::IDocsumEnvironment& env, search::docsummary::DynamicDocsumWriter* writer, std::shared_ptr<VsmfieldsConfig> vsm_fields_config) : Parent(env, writer), _vsm_fields_config(std::move(vsm_fields_config)) { } -std::unique_ptr<DocsumFieldWriter> -DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string & overrideName, const string & argument, bool & rc, std::shared_ptr<search::MatchingElementsFields> matching_elems_fields) +std::unique_ptr<search::docsummary::IDocsumFieldWriterFactory> +DynamicDocsumConfig::make_docsum_field_writer_factory() { - std::unique_ptr<DocsumFieldWriter> fieldWriter; - if ((overrideName == "staticrank") || - (overrideName == "ranklog") || - (overrideName == "label") || - (overrideName == "project") || - (overrideName == "positions") || - (overrideName == "absdist") || - (overrideName == "subproject")) - { - fieldWriter = std::make_unique<EmptyDFW>(); - rc = true; - } else if ((overrideName == "attribute") || - (overrideName == "attributecombiner")) { - if (!argument.empty() && argument != fieldName) { - fieldWriter = std::make_unique<CopyDFW>(argument); - } - rc = true; - } else if (overrideName == "geopos") { - rc = true; - } else if ((overrideName == "matchedattributeelementsfilter") || - (overrideName == "matchedelementsfilter")) { - string source_field = argument.empty() ? fieldName : argument; - populate_fields(*matching_elems_fields, *_vsm_fields_config, source_field); - fieldWriter = MatchedElementsFilterDFW::create(source_field, matching_elems_fields); - rc = static_cast<bool>(fieldWriter); - } else { - fieldWriter = search::docsummary::DynamicDocsumConfig::createFieldWriter(fieldName, overrideName, argument, rc, matching_elems_fields); - } - return fieldWriter; + return std::make_unique<DocsumFieldWriterFactory>(getResultConfig().useV8geoPositions(), getEnvironment(), *_vsm_fields_config); } } diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.h b/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.h index a660c544d7d..d5b7e258165 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.h +++ b/streamingvisitors/src/vespa/vsm/vsm/docsumconfig.h @@ -18,11 +18,9 @@ public: private: std::shared_ptr<VsmfieldsConfig> _vsm_fields_config; public: - DynamicDocsumConfig(search::docsummary::IDocsumEnvironment* env, search::docsummary::DynamicDocsumWriter* writer, std::shared_ptr<VsmfieldsConfig> vsm_fields_config); + DynamicDocsumConfig(search::docsummary::IDocsumEnvironment& env, search::docsummary::DynamicDocsumWriter* writer, std::shared_ptr<VsmfieldsConfig> vsm_fields_config); private: - std::unique_ptr<search::docsummary::DocsumFieldWriter> - createFieldWriter(const string & fieldName, const string & overrideName, - const string & cf, bool & rc, std::shared_ptr<search::MatchingElementsFields> matching_elems_fields) override; + std::unique_ptr<search::docsummary::IDocsumFieldWriterFactory> make_docsum_field_writer_factory() override; }; } diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp index 8bd416ca716..a49eec1a869 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp @@ -7,6 +7,7 @@ #include <vespa/searchsummary/docsummary/summaryfieldconverter.h> #include <vespa/document/base/exceptions.h> #include <vespa/document/fieldvalue/iteratorhandler.h> +#include <vespa/vespalib/data/slime/inserter.h> #include <vespa/log/log.h> LOG_SETUP(".vsm.docsumfilter"); diff --git a/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.cpp b/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.cpp index 5f0ec60656e..f0278bb3470 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.cpp @@ -1,11 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "slimefieldwriter.h" -#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vespalib/util/size_literals.h> #include <vespa/searchsummary/docsummary/resultconfig.h> #include <vespa/document/datatype/positiondatatype.h> +#include <vespa/vespalib/data/slime/slime.h> #include <vespa/log/log.h> LOG_SETUP(".vsm.slimefieldwriter"); @@ -13,19 +13,6 @@ LOG_SETUP(".vsm.slimefieldwriter"); namespace { vespalib::string -toString(const vsm::FieldPath & fieldPath) -{ - vespalib::asciistream oss; - for (size_t i = 0; i < fieldPath.size(); ++i) { - if (i > 0) { - oss << "."; - } - oss << fieldPath[i].getName(); - } - return oss.str(); -} - -vespalib::string toString(const std::vector<vespalib::string> & fieldPath) { vespalib::asciistream oss; @@ -42,7 +29,6 @@ toString(const std::vector<vespalib::string> & fieldPath) using namespace vespalib::slime::convenience; - namespace vsm { void @@ -52,18 +38,17 @@ SlimeFieldWriter::traverseRecursive(const document::FieldValue & fv, Inserter &i fv.className(), fv.toString().c_str(), toString(_currPath).c_str()); if (fv.isCollection()) { - const document::CollectionFieldValue & cfv = static_cast<const document::CollectionFieldValue &>(fv); + const auto & cfv = static_cast<const document::CollectionFieldValue &>(fv); if (cfv.isA(document::FieldValue::Type::ARRAY)) { - const document::ArrayFieldValue & afv = static_cast<const document::ArrayFieldValue &>(cfv); + const auto & afv = static_cast<const document::ArrayFieldValue &>(cfv); Cursor &a = inserter.insertArray(); - for (size_t i = 0; i < afv.size(); ++i) { - const document::FieldValue & nfv = afv[i]; + for (const auto & nfv : afv) { ArrayInserter ai(a); traverseRecursive(nfv, ai); } } else { assert(cfv.isA(document::FieldValue::Type::WSET)); - const document::WeightedSetFieldValue & wsfv = static_cast<const document::WeightedSetFieldValue &>(cfv); + const auto & wsfv = static_cast<const document::WeightedSetFieldValue &>(cfv); Cursor &a = inserter.insertArray(); Symbol isym = a.resolve("item"); Symbol wsym = a.resolve("weight"); @@ -77,7 +62,7 @@ SlimeFieldWriter::traverseRecursive(const document::FieldValue & fv, Inserter &i } } } else if (fv.isA(document::FieldValue::Type::MAP)) { - const document::MapFieldValue & mfv = static_cast<const document::MapFieldValue &>(fv); + const auto & mfv = static_cast<const document::MapFieldValue &>(fv); Cursor &a = inserter.insertArray(); Symbol keysym = a.resolve("key"); Symbol valsym = a.resolve("value"); @@ -85,13 +70,13 @@ SlimeFieldWriter::traverseRecursive(const document::FieldValue & fv, Inserter &i Cursor &o = a.addObject(); ObjectSymbolInserter ki(o, keysym); traverseRecursive(*entry.first, ki); - _currPath.push_back("value"); + _currPath.emplace_back("value"); ObjectSymbolInserter vi(o, valsym); traverseRecursive(*entry.second, vi); _currPath.pop_back(); } } else if (fv.isStructured()) { - const document::StructuredFieldValue & sfv = static_cast<const document::StructuredFieldValue &>(fv); + const auto & sfv = static_cast<const document::StructuredFieldValue &>(fv); Cursor &o = inserter.insertObject(); if (sfv.getDataType() == &document::PositionDataType::getInstance() && search::docsummary::ResultConfig::wantedV8geoPositions()) @@ -134,7 +119,7 @@ SlimeFieldWriter::traverseRecursive(const document::FieldValue & fv, Inserter &i } } else { if (fv.isLiteral()) { - const document::LiteralFieldValueB & lfv = static_cast<const document::LiteralFieldValueB &>(fv); + const auto & lfv = static_cast<const document::LiteralFieldValueB &>(fv); inserter.insertString(lfv.getValueRef()); } else if (fv.isNumeric()) { switch (fv.getDataType()->getId()) { @@ -169,8 +154,8 @@ SlimeFieldWriter::explorePath(vespalib::stringref candidate) return true; } // find out if we should explore the current path - for (size_t i = 0; i < _inputFields->size(); ++i) { - const FieldPath & fp = (*_inputFields)[i].getPath(); + for (const auto & field : *_inputFields) { + const FieldPath & fp = field.getPath(); if (_currPath.size() <= fp.size()) { bool equal = true; for (size_t j = 0; j < _currPath.size() && equal; ++j) { @@ -190,8 +175,6 @@ SlimeFieldWriter::explorePath(vespalib::stringref candidate) } SlimeFieldWriter::SlimeFieldWriter() : - _rbuf(4_Ki), - _slime(), _inputFields(nullptr), _currPath() { @@ -205,22 +188,4 @@ SlimeFieldWriter::insert(const document::FieldValue & fv, vespalib::slime::Inser traverseRecursive(fv, inserter); } -void -SlimeFieldWriter::convert(const document::FieldValue & fv) -{ - if (LOG_WOULD_LOG(debug)) { - if (_inputFields != nullptr) { - for (size_t i = 0; i < _inputFields->size(); ++i) { - LOG(debug, "write: input field path [%zd] '%s'", i, toString((*_inputFields)[i].getPath()).c_str()); - } - } else { - LOG(debug, "write: no input fields"); - } - } - SlimeInserter inserter(_slime); - traverseRecursive(fv, inserter); - search::SlimeOutputRawBufAdapter adapter(_rbuf); - vespalib::slime::BinaryFormat::encode(_slime, adapter); -} - } diff --git a/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h b/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h index 3d7ece93694..0907783feaf 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h +++ b/streamingvisitors/src/vespa/vsm/vsm/slimefieldwriter.h @@ -4,8 +4,8 @@ #include "docsumfieldspec.h" #include <vespa/vsm/common/storagedocument.h> #include <vespa/document/fieldvalue/fieldvalues.h> -#include <vespa/vespalib/data/slime/slime.h> -#include <vespa/searchlib/util/rawbuf.h> + +namespace vespalib::slime { class Inserter; } namespace vsm { @@ -17,8 +17,6 @@ namespace vsm { class SlimeFieldWriter { private: - search::RawBuf _rbuf; - vespalib::Slime _slime; const DocsumFieldSpec::FieldIdentifierVector * _inputFields; std::vector<vespalib::string> _currPath; @@ -29,7 +27,6 @@ public: SlimeFieldWriter(); ~SlimeFieldWriter(); - /** * Specifies the subset of the field value that should be written. **/ @@ -40,20 +37,7 @@ public: **/ void insert(const document::FieldValue & fv, vespalib::slime::Inserter& inserter); - /** - * Convert the given field value - **/ - void convert(const document::FieldValue & fv); - - /** - * Return a reference to the output binary data - **/ - vespalib::stringref out() const { - return vespalib::stringref(_rbuf.GetDrainPos(), _rbuf.GetUsedLen()); - } - void clear() { - _rbuf.Reuse(); _inputFields = nullptr; _currPath.clear(); } diff --git a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp index e7532d2a25a..2bf6b2f3972 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp @@ -4,6 +4,7 @@ #include "docsumconfig.h" #include "i_matching_elements_filler.h" #include <vespa/searchlib/common/matching_elements.h> +#include <vespa/searchsummary/docsummary/keywordextractor.h> #include <vespa/log/log.h> LOG_SETUP(".vsm.vsm-adapter"); @@ -21,20 +22,18 @@ GetDocsumsStateCallback::GetDocsumsStateCallback() : _matching_elements_filler() { } -void GetDocsumsStateCallback::FillSummaryFeatures(GetDocsumsState * state, IDocsumEnvironment * env) +void GetDocsumsStateCallback::FillSummaryFeatures(GetDocsumsState& state) { - (void) env; if (_summaryFeatures) { // set the summary features to write to the docsum - state->_summaryFeatures = _summaryFeatures; - state->_summaryFeaturesCached = true; + state._summaryFeatures = _summaryFeatures; + state._summaryFeaturesCached = true; } } -void GetDocsumsStateCallback::FillRankFeatures(GetDocsumsState * state, IDocsumEnvironment * env) +void GetDocsumsStateCallback::FillRankFeatures(GetDocsumsState& state) { - (void) env; if (_rankFeatures) { // set the rank features to write to the docsum - state->_rankFeatures = _rankFeatures; + state._rankFeatures = _rankFeatures; } } @@ -69,16 +68,24 @@ DocsumTools::FieldSpec::FieldSpec() : DocsumTools::FieldSpec::~FieldSpec() = default; -DocsumTools::DocsumTools(std::unique_ptr<DynamicDocsumWriter> writer) : - _writer(std::move(writer)), - _juniper(), - _resultClass(), - _fieldSpecs() -{ } +DocsumTools::DocsumTools() + : IDocsumEnvironment(), + _writer(), + _juniper(), + _resultClass(), + _fieldSpecs() +{ +} DocsumTools::~DocsumTools() = default; +void +DocsumTools::set_writer(std::unique_ptr<DynamicDocsumWriter> writer) +{ + _writer = std::move(writer); +} + bool DocsumTools::obtainFieldNames(const FastS_VsmsummaryHandle &cfg) { @@ -134,6 +141,14 @@ VSMAdapter::configure(const VSMConfigSnapshot & snapshot) LOG(debug, "configureVsmSummary(): Size of cfg fieldmap: %zd", vsmSummary->fieldmap.size()); // UlfC: debugging LOG(debug, "configureVsmSummary(): outputclass='%s'", vsmSummary->outputclass.c_str()); // UlfC: debugging + // create new docsum tools + auto docsumTools = std::make_unique<DocsumTools>(); + + // configure juniper (used when configuring DynamicDocsumConfig) + _juniperProps = std::make_unique<JuniperProperties>(*juniperrc); + auto juniper = std::make_unique<juniper::Juniper>(_juniperProps.get(), &_wordFolder); + docsumTools->setJuniper(std::move(juniper)); + // init result config auto resCfg = std::make_unique<ResultConfig>(); if ( ! resCfg->ReadConfig(*summary.get(), _configId.c_str())) { @@ -148,17 +163,10 @@ VSMAdapter::configure(const VSMConfigSnapshot & snapshot) // create dynamic docsum writer auto writer = std::make_unique<DynamicDocsumWriter>(std::move(resCfg), std::move(kwExtractor)); - - // configure juniper (used when configuring DynamicDocsumConfig) - _juniperProps = std::make_unique<JuniperProperties>(*juniperrc); - auto juniper = std::make_unique<juniper::Juniper>(_juniperProps.get(), &_wordFolder); - - // create new docsum tools - auto docsumTools = std::make_unique<DocsumTools>(std::move(writer)); - docsumTools->setJuniper(std::move(juniper)); + docsumTools->set_writer(std::move(writer)); // configure dynamic docsum writer - DynamicDocsumConfig dynDocsumConfig(docsumTools.get(), docsumTools->getDocsumWriter(), _fieldsCfg.get()); + DynamicDocsumConfig dynDocsumConfig(*docsumTools, docsumTools->getDocsumWriter(), _fieldsCfg.get()); dynDocsumConfig.configure(*summaryMap.get()); // configure new docsum tools diff --git a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.h b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.h index 656ab2e8fc6..b8583dc801d 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.h +++ b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.h @@ -38,8 +38,8 @@ private: public: GetDocsumsStateCallback(); - void FillSummaryFeatures(GetDocsumsState * state, IDocsumEnvironment * env) override; - void FillRankFeatures(GetDocsumsState * state, IDocsumEnvironment * env) override; + void FillSummaryFeatures(GetDocsumsState& state) override; + void FillRankFeatures(GetDocsumsState& state) override; virtual void FillDocumentLocations(GetDocsumsState * state, IDocsumEnvironment * env); virtual std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::MatchingElementsFields& fields) override; void setSummaryFeatures(const search::FeatureSet::SP & sf) { _summaryFeatures = sf; } @@ -77,8 +77,9 @@ private: DocsumTools &operator=(const DocsumTools &); public: - DocsumTools(std::unique_ptr<DynamicDocsumWriter> writer); + DocsumTools(); ~DocsumTools(); + void set_writer(std::unique_ptr<DynamicDocsumWriter> writer); void setJuniper(std::unique_ptr<juniper::Juniper> juniper) { _juniper = std::move(juniper); } const ResultConfig *getResultConfig() const { return _writer->GetResultConfig(); } DynamicDocsumWriter *getDocsumWriter() const { return _writer.get(); } @@ -87,7 +88,7 @@ public: bool obtainFieldNames(const FastS_VsmsummaryHandle &cfg); // inherit doc from IDocsumEnvironment - search::IAttributeManager * getAttributeManager() override { return NULL; } + const search::IAttributeManager * getAttributeManager() const override { return nullptr; } vespalib::string lookupIndex(const vespalib::string&) const override { return ""; } juniper::Juniper * getJuniper() override { return _juniper.get(); } }; diff --git a/vbench/src/vbench/core/Doxyfile b/vbench/src/vbench/core/Doxyfile deleted file mode 100644 index 2b7a0a133ff..00000000000 --- a/vbench/src/vbench/core/Doxyfile +++ /dev/null @@ -1,1162 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -# Doxyfile 1.3.9.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = vbench_core - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of source -# files, where putting all generated files in the same directory would otherwise -# cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 4096 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 4096 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/vespalib/src/Doxyfile b/vespalib/src/Doxyfile deleted file mode 100644 index 0d63f28039d..00000000000 --- a/vespalib/src/Doxyfile +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = vespalib -PROJECT_NUMBER = -OUTPUT_DIRECTORY = ../doc/doxygen -CREATE_SUBDIRS = NO -OUTPUT_LANGUAGE = English -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = YES -STRIP_FROM_PATH = -STRIP_FROM_INC_PATH = ./ -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = YES -QT_AUTOBRIEF = NO -MULTILINE_CPP_IS_BRIEF = NO -INHERIT_DOCS = YES -SEPARATE_MEMBER_PAGES = NO -TAB_SIZE = 8 -ALIASES = -OPTIMIZE_OUTPUT_FOR_C = NO -OPTIMIZE_OUTPUT_JAVA = NO -OPTIMIZE_FOR_FORTRAN = NO -OPTIMIZE_OUTPUT_VHDL = NO -EXTENSION_MAPPING = -BUILTIN_STL_SUPPORT = NO -CPP_CLI_SUPPORT = NO -SIP_SUPPORT = NO -IDL_PROPERTY_SUPPORT = YES -DISTRIBUTE_GROUP_DOC = NO -SUBGROUPING = YES -TYPEDEF_HIDES_STRUCT = NO -SYMBOL_CACHE_SIZE = 0 -EXTRACT_ALL = YES -EXTRACT_PRIVATE = NO -EXTRACT_STATIC = NO -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_LOCAL_METHODS = NO -EXTRACT_ANON_NSPACES = NO -HIDE_UNDOC_MEMBERS = YES -HIDE_UNDOC_CLASSES = YES -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = NO -CASE_SENSE_NAMES = YES -HIDE_SCOPE_NAMES = NO -SHOW_INCLUDE_FILES = YES -INLINE_INFO = YES -SORT_MEMBER_DOCS = YES -SORT_BRIEF_DOCS = NO -SORT_MEMBERS_CTORS_1ST = NO -SORT_GROUP_NAMES = NO -SORT_BY_SCOPE_NAME = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 30 -SHOW_USED_FILES = YES -SHOW_DIRECTORIES = NO -SHOW_FILES = YES -SHOW_NAMESPACES = YES -FILE_VERSION_FILTER = -LAYOUT_FILE = -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES -WARN_NO_PARAMDOC = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = -INPUT = vespalib/util \ - vespalib/component \ - vespalib/cppunit \ - vespalib/geo \ - vespalib/io \ - vespalib/text \ - vespalib/testkit -INPUT_ENCODING = UTF-8 -FILE_PATTERNS = -RECURSIVE = NO -EXCLUDE = -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXCLUDE_SYMBOLS = -EXAMPLE_PATH = -EXAMPLE_PATTERNS = -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO -SOURCE_BROWSER = YES -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = NO -REFERENCES_LINK_SOURCE = YES -USE_HTAGS = NO -VERBATIM_HEADERS = YES -ALPHABETICAL_INDEX = YES -COLS_IN_ALPHA_INDEX = 5 -IGNORE_PREFIX = -GENERATE_HTML = YES -HTML_OUTPUT = html -HTML_FILE_EXTENSION = .html -HTML_HEADER = -HTML_FOOTER = -HTML_TIMESTAMP = NO -HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES -HTML_DYNAMIC_SECTIONS = NO -GENERATE_DOCSET = NO -DOCSET_FEEDNAME = "Doxygen generated docs" -DOCSET_BUNDLE_ID = org.doxygen.Project -GENERATE_HTMLHELP = NO -CHM_FILE = -HHC_LOCATION = -GENERATE_CHI = NO -CHM_INDEX_ENCODING = -BINARY_TOC = NO -TOC_EXPAND = NO -GENERATE_QHP = NO -QCH_FILE = -QHP_NAMESPACE = -QHP_VIRTUAL_FOLDER = doc -QHP_CUST_FILTER_NAME = -QHP_CUST_FILTER_ATTRS = -QHP_SECT_FILTER_ATTRS = -QHG_LOCATION = -DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = NO -USE_INLINE_TREES = NO -TREEVIEW_WIDTH = 250 -FORMULA_FONTSIZE = 10 -SEARCHENGINE = NO -GENERATE_LATEX = NO -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = a4wide -EXTRA_PACKAGES = -LATEX_HEADER = -PDF_HYPERLINKS = NO -USE_PDFLATEX = NO -LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO -LATEX_SOURCE_CODE = NO -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_LINKS = NO -GENERATE_XML = NO -XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = -XML_PROGRAMLISTING = YES -GENERATE_AUTOGEN_DEF = NO -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = IAM_DOXYGEN -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES -TAGFILES = -GENERATE_TAGFILE = ../doc/doxygen/vespalib.tag -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -PERL_PATH = /usr/bin/perl -CLASS_DIAGRAMS = YES -MSCGEN_PATH = -HIDE_UNDOC_RELATIONS = YES -HAVE_DOT = YES -DOT_FONTNAME = FreeSans -DOT_FONTSIZE = 10 -DOT_FONTPATH = -CLASS_GRAPH = NO -COLLABORATION_GRAPH = YES -GROUP_GRAPHS = YES -UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = NO -INCLUDED_BY_GRAPH = NO -CALL_GRAPH = NO -CALLER_GRAPH = NO -GRAPHICAL_HIERARCHY = YES -DIRECTORY_GRAPH = YES -DOT_IMAGE_FORMAT = png -DOT_PATH = -DOTFILE_DIRS = -DOT_GRAPH_MAX_NODES = 50 -MAX_DOT_GRAPH_DEPTH = 0 -DOT_TRANSPARENT = NO -DOT_MULTI_TARGETS = NO -GENERATE_LEGEND = YES -DOT_CLEANUP = YES diff --git a/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp b/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp index 3d19c335c19..0178443643e 100644 --- a/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp +++ b/vespalib/src/tests/net/tls/openssl_impl/openssl_impl_test.cpp @@ -622,8 +622,8 @@ TEST_F("Peer credentials are propagated to CryptoCodec", CertFixture) { auto& client_creds = f.server->peer_credentials(); auto& server_creds = f.client->peer_credentials(); - fprintf(stderr, "Client credentials (observed by server): %s\n", to_string(client_creds).c_str()); - fprintf(stderr, "Server credentials (observed by client): %s\n", to_string(server_creds).c_str()); + fprintf(stderr, "Client credentials (observed by server): %s\n", client_creds.to_string().c_str()); + fprintf(stderr, "Server credentials (observed by client): %s\n", server_creds.to_string().c_str()); EXPECT_EQUAL("rockets.wile.example.com", client_creds.common_name); ASSERT_EQUAL(2u, client_creds.dns_sans.size()); diff --git a/vespalib/src/vespa/vespalib/data/slime/inserter.h b/vespalib/src/vespa/vespalib/data/slime/inserter.h index 2334f5d64b5..db6baf2ef4a 100644 --- a/vespalib/src/vespa/vespalib/data/slime/inserter.h +++ b/vespalib/src/vespa/vespalib/data/slime/inserter.h @@ -3,9 +3,9 @@ #pragma once #include "type.h" -#include <vespa/vespalib/data/memory.h> #include "symbol.h" #include "external_memory.h" +#include <vespa/vespalib/data/memory.h> namespace vespalib { class Slime; } diff --git a/vespalib/src/vespa/vespalib/data/smart_buffer.cpp b/vespalib/src/vespa/vespalib/data/smart_buffer.cpp index de079261d6d..8b7bed62ac5 100644 --- a/vespalib/src/vespa/vespalib/data/smart_buffer.cpp +++ b/vespalib/src/vespa/vespalib/data/smart_buffer.cpp @@ -32,8 +32,7 @@ SmartBuffer::drop() { alloc::Alloc empty_buf; _data.swap(empty_buf); - _read_pos = 0; - _write_pos = 0; + reset(); } SmartBuffer::SmartBuffer(size_t initial_size) diff --git a/vespalib/src/vespa/vespalib/data/smart_buffer.h b/vespalib/src/vespa/vespalib/data/smart_buffer.h index eb817e71bbf..17fb7614f0e 100644 --- a/vespalib/src/vespa/vespalib/data/smart_buffer.h +++ b/vespalib/src/vespa/vespalib/data/smart_buffer.h @@ -39,6 +39,10 @@ public: drop(); } } + void reset() { + _read_pos = 0; + _write_pos = 0; + } Memory obtain() override; Input &evict(size_t bytes) override; WritableMemory reserve(size_t bytes) override; diff --git a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp index d7977f6cd2a..e088eeb4906 100644 --- a/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp +++ b/vespalib/src/vespa/vespalib/net/tls/impl/openssl_tls_context_impl.cpp @@ -482,7 +482,7 @@ bool OpenSslTlsContextImpl::verify_trusted_certificate(::X509_STORE_CTX* store_c // Buffer warnings on peer IP address to avoid log flooding. LOGBT(warning, codec_impl.peer_address().ip_address(), "Certificate verification of peer '%s' failed with %s", - codec_impl.peer_address().spec().c_str(), to_string(creds).c_str()); + codec_impl.peer_address().spec().c_str(), creds.to_string().c_str()); return (authz_mode != AuthorizationMode::Enforce); } // Store away credentials and role set for later use by requests that arrive over this connection. diff --git a/vespalib/src/vespa/vespalib/net/tls/peer_credentials.cpp b/vespalib/src/vespa/vespalib/net/tls/peer_credentials.cpp index 9a001e24fea..92854bdd7d5 100644 --- a/vespalib/src/vespa/vespalib/net/tls/peer_credentials.cpp +++ b/vespalib/src/vespa/vespalib/net/tls/peer_credentials.cpp @@ -14,7 +14,7 @@ PeerCredentials& PeerCredentials::operator=(PeerCredentials&&) noexcept = defaul PeerCredentials::~PeerCredentials() = default; std::ostream& operator<<(std::ostream& os, const PeerCredentials& creds) { - os << to_string(creds); + os << creds.to_string(); return os; } @@ -36,20 +36,20 @@ void emit_comma_separated_string_list(asciistream& os, stringref title, } } -vespalib::string to_string(const PeerCredentials& creds) { +vespalib::string PeerCredentials::to_string() const { asciistream os; os << "PeerCredentials("; bool emit_comma = false; - if (!creds.common_name.empty()) { - os << "CN '" << creds.common_name << "'"; + if (!common_name.empty()) { + os << "CN '" << common_name << "'"; emit_comma = true; } - if (!creds.dns_sans.empty()) { - emit_comma_separated_string_list(os, "DNS SANs", creds.dns_sans, emit_comma); + if (!dns_sans.empty()) { + emit_comma_separated_string_list(os, "DNS SANs", dns_sans, emit_comma); emit_comma = true; } - if (!creds.uri_sans.empty()) { - emit_comma_separated_string_list(os, "URI SANs", creds.uri_sans, emit_comma); + if (!uri_sans.empty()) { + emit_comma_separated_string_list(os, "URI SANs", uri_sans, emit_comma); } os << ')'; return os.str(); diff --git a/vespalib/src/vespa/vespalib/net/tls/peer_credentials.h b/vespalib/src/vespa/vespalib/net/tls/peer_credentials.h index b81772d2bce..22c98c023b5 100644 --- a/vespalib/src/vespa/vespalib/net/tls/peer_credentials.h +++ b/vespalib/src/vespa/vespalib/net/tls/peer_credentials.h @@ -23,10 +23,10 @@ struct PeerCredentials { PeerCredentials(PeerCredentials&&) noexcept; PeerCredentials& operator=(PeerCredentials&&) noexcept; ~PeerCredentials(); + + vespalib::string to_string() const; }; std::ostream& operator<<(std::ostream&, const PeerCredentials&); -vespalib::string to_string(const PeerCredentials&); - } diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java index 8f8058c6c0b..6508c154978 100644 --- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java +++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.zookeeper; import com.yahoo.cloud.config.ZookeeperServerConfig; +import com.yahoo.security.tls.ConfigFileBasedTlsContext; import com.yahoo.security.tls.MixedMode; import com.yahoo.security.tls.TlsContext; import com.yahoo.security.tls.TransportSecurityUtils; @@ -47,7 +48,16 @@ public class Configurator { System.setProperty("zookeeper.snapshot.compression.method", zookeeperServerConfig.snapshotMethod()); } - void writeConfigToDisk() { writeConfigToDisk(VespaTlsConfig.fromSystem()); } + void writeConfigToDisk() { + VespaTlsConfig config; + String cfgFile = zookeeperServerConfig.vespaTlsConfigFile(); + if (cfgFile.isBlank()) { + config = VespaTlsConfig.fromSystem(); + } else { + config = VespaTlsConfig.fromConfig(Paths.get(cfgFile)); + } + writeConfigToDisk(config); + } // override of Vespa TLS config for unit testing void writeConfigToDisk(VespaTlsConfig vespaTlsConfig) { @@ -158,6 +168,7 @@ public class Configurator { default void appendSharedTlsConfig(StringBuilder builder, VespaTlsConfig vespaTlsConfig) { vespaTlsConfig.context().ifPresent(ctx -> { + VespaSslContextProvider.set(ctx); builder.append(configFieldPrefix()).append(".context.supplier.class=").append(VespaSslContextProvider.class.getName()).append("\n"); String enabledCiphers = Arrays.stream(ctx.parameters().getCipherSuites()).sorted().collect(Collectors.joining(",")); builder.append(configFieldPrefix()).append(".ciphersuites=").append(enabledCiphers).append("\n"); @@ -224,6 +235,13 @@ public class Configurator { TransportSecurityUtils.getInsecureMixedMode()); } + static VespaTlsConfig fromConfig(Path file) { + return new VespaTlsConfig( + new ConfigFileBasedTlsContext(file, TransportSecurityUtils.getInsecureAuthorizationMode()), + TransportSecurityUtils.getInsecureMixedMode()); + } + + static VespaTlsConfig tlsDisabled() { return new VespaTlsConfig(null, MixedMode.defaultValue()); } boolean tlsEnabled() { return context != null; } diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaSslContextProvider.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaSslContextProvider.java index 89a0fa8a924..5434804cd62 100644 --- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaSslContextProvider.java +++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaSslContextProvider.java @@ -2,7 +2,6 @@ package com.yahoo.vespa.zookeeper; import com.yahoo.security.tls.TlsContext; -import com.yahoo.security.tls.TransportSecurityUtils; import javax.net.ssl.SSLContext; import java.util.function.Supplier; @@ -14,12 +13,19 @@ import java.util.function.Supplier; */ public class VespaSslContextProvider implements Supplier<SSLContext> { - private static final SSLContext sslContext = TransportSecurityUtils.getSystemTlsContext().map(TlsContext::context).orElse(null); + private static TlsContext tlsContext; @Override public SSLContext get() { - if (sslContext == null) throw new IllegalStateException("Vespa TLS is not enabled"); - return sslContext; + synchronized (VespaSslContextProvider.class) { + if (tlsContext == null) throw new IllegalStateException("Vespa TLS is not enabled"); + return tlsContext.context(); + } + } + + static synchronized void set(TlsContext ctx) { + if (tlsContext != null) tlsContext.close(); + tlsContext = ctx; } } |