Skip to content

Instantly share code, notes, and snippets.

@cryptix
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cryptix/4eb3b1fe3bce142ae7bb to your computer and use it in GitHub Desktop.
Save cryptix/4eb3b1fe3bce142ae7bb to your computer and use it in GitHub Desktop.
"not found" when using gridfile as io.WriteSeeker
package main
import (
"fmt"
"io"
"os"
"labix.org/v2/mgo"
)
const (
dbHost = "localhost"
dbName = "gridfstest"
)
// SeekUser just contains a io.WriteSeeker
type SeekUser struct {
output io.WriteSeeker
}
var pattern = []byte("abcdefghijkl")
// Init just writes some pattern into the file
func (s SeekUser) Init() error {
n, err := s.output.Write(pattern)
if err != nil {
return fmt.Errorf("error during s.output.Write(): %s", err)
}
if n != len(pattern) {
return fmt.Errorf("didn't write pattern properly.\nWrote %d, wanted %d\n", n, len(pattern))
}
return nil
}
// DoStuff seeks back to the begining and writes over some bytes
func (s SeekUser) DoStuff() error {
_, err := s.output.Seek(3, os.SEEK_SET)
if err != nil {
return fmt.Errorf("error during s.output.Seek(): %s", err)
}
_, err = s.output.Write([]byte("123"))
if err != nil {
return fmt.Errorf("error during s.output.Write(): %s", err)
}
return nil
}
// NewSeekUser returns a new SeekUser, using the passed io.WriteSeeker
func NewSeekUser(out io.WriteSeeker) *SeekUser {
return &SeekUser{out}
}
func main() {
mgoSession, err := mgo.Dial(fmt.Sprintf("%s/%s", dbHost, dbName))
checkErr(err)
mgoDb := mgoSession.DB(dbName)
mgoGrid := mgoDb.GridFS("fs")
target, err := mgoGrid.Create("TestFile")
checkErr(err)
target.SetChunkSize(1000)
su := NewSeekUser(target)
err = su.Init()
checkErr(err)
err = su.DoStuff()
checkErr(err)
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
[cryptix@planc ~/code/go:master*] go run GridFSSeekTest.go
panic: error during s.output.Seek(): not found
goroutine 1 [running]:
runtime.panic(0x567f60, 0xc21000ac10)
/mnt/fast/go/src/pkg/runtime/panic.c:266 +0xb6
main.checkErr(0x7fc6f940fe80, 0xc21000ac10)
/home/cryptix/code/go/GridFSSeekTest.go:83 +0x4f
main.main()
/home/cryptix/code/go/GridFSSeekTest.go:77 +0x2e0
goroutine 3 [sleep]:
time.Sleep(0x1dcd6500)
/mnt/fast/go/src/pkg/runtime/time.goc:31 +0x31
labix.org/v2/mgo.(*mongoCluster).syncServersLoop(0xc210051000)
/home/cryptix/go/src/labix.org/v2/mgo/cluster.go:342 +0x244
created by labix.org/v2/mgo.newCluster
/home/cryptix/go/src/labix.org/v2/mgo/cluster.go:72 +0x120
goroutine 5 [syscall]:
runtime.goexit()
/mnt/fast/go/src/pkg/runtime/proc.c:1394
goroutine 7 [IO wait]:
net.runtime_pollWait(0x7fc6f94111d0, 0x72, 0x0)
/mnt/fast/go/src/pkg/runtime/netpoll.goc:116 +0x6a
net.(*pollDesc).Wait(0xc2100500d0, 0x72, 0x7fc6f9410098, 0xb)
/mnt/fast/go/src/pkg/net/fd_poll_runtime.go:81 +0x34
net.(*pollDesc).WaitRead(0xc2100500d0, 0xb, 0x7fc6f9410098)
/mnt/fast/go/src/pkg/net/fd_poll_runtime.go:86 +0x30
net.(*netFD).Read(0xc210050070, 0xc21001d870, 0x24, 0x24, 0x0, ...)
/mnt/fast/go/src/pkg/net/fd_unix.go:204 +0x2a0
net.(*conn).Read(0xc210000258, 0xc21001d870, 0x24, 0x24, 0x0, ...)
/mnt/fast/go/src/pkg/net/net.go:122 +0xc5
labix.org/v2/mgo.fill(0x7fc6f9410208, 0xc210000258, 0xc21001d870, 0x24, 0x24, ...)
/home/cryptix/go/src/labix.org/v2/mgo/socket.go:489 +0x5b
labix.org/v2/mgo.(*mongoSocket).readLoop(0xc210044700)
/home/cryptix/go/src/labix.org/v2/mgo/socket.go:506 +0x115
created by labix.org/v2/mgo.newSocket
/home/cryptix/go/src/labix.org/v2/mgo/socket.go:163 +0x2b3
goroutine 8 [sleep]:
time.Sleep(0x12a05f200)
/mnt/fast/go/src/pkg/runtime/time.goc:31 +0x31
labix.org/v2/mgo.(*mongoServer).pinger(0xc210044540, 0xc210044501)
/home/cryptix/go/src/labix.org/v2/mgo/server.go:284 +0x10f
created by labix.org/v2/mgo.newServer
/home/cryptix/go/src/labix.org/v2/mgo/server.go:87 +0xf6
exit status 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment