mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-13 22:38:01 +00:00
The new roaring iterator used for the remap and importroaring things could also be used for unmarshalling roaring streams, and it's a slightly simpler design that doesn't need two passes through the data. This patch cleans that up a bit, makes it work better with ops logs, and uses that instead. It appears to noticably but not immensely reduce the time imports take, but it also gets us back down to one thing parsing roaring formats. There are a couple of subtle changes to errors we were testing for in various tests, and one of the fuzz tests goes away because it was actually itself an erroneous error message -- it was reporting the header of a roaring file as an invalid op because the op log reader was running on the header for roaring files with zero containers. Oops.
60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
// Copyright 2017 Pilosa Corp.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package ctl
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestInspectCommand_Run(t *testing.T) {
|
|
rder := []byte{}
|
|
stdin := bytes.NewReader(rder)
|
|
r, w, _ := os.Pipe()
|
|
|
|
cm := NewInspectCommand(stdin, w, w)
|
|
file, err := ioutil.TempFile("", "inspectTest")
|
|
if err != nil {
|
|
t.Fatalf("Error creating tempfile: %s", err)
|
|
}
|
|
_, err = file.Write([]byte("12358267538963"))
|
|
if err != nil {
|
|
t.Fatalf("writing to tempfile: %v", err)
|
|
}
|
|
file.Close()
|
|
cm.Path = file.Name()
|
|
err = cm.Run(context.Background())
|
|
expectedError := "unmarshalling: unknown roaring magic number 12849"
|
|
if err != nil && err.Error() != expectedError {
|
|
t.Fatalf("expected error '%s', got '%v'", expectedError, err)
|
|
}
|
|
|
|
w.Close()
|
|
var buf bytes.Buffer
|
|
_, err = io.Copy(&buf, r)
|
|
if err != nil {
|
|
t.Fatalf("copying data: %v", err)
|
|
}
|
|
if !strings.Contains(buf.String(), "unmarshalling bitmap...") {
|
|
t.Fatalf("Inspect doesn't work: %s", err)
|
|
}
|
|
|
|
// Todo: need correct roaring file for happy path
|
|
}
|