func pubHandler(w http.ResponseWriter, req *http.Request) { name := req.FormValue("topic") if name == "" { http.Error(w, "missing topic", 403) return } size, err := strconv.Atoi(req.FormValue("size")) if err != nil { http.Error(w, err.Error(), 403) return } var ( msg *message.Ins header message.Header msgs = make([]*message.Ins, 0, size) ) for !logex.Equal(err, io.EOF) { msg, err = message.ReadMessage(&header, req.Body, message.RF_DEFAULT) if err != nil { break } msgs = append(msgs, msg) } t, err := getTopic(name) if err != nil { http.Error(w, err.Error(), 500) return } t.PutSync(msgs) w.Write([]byte("hello")) }
func (t *Ins) get(arg *getArgs, mustReply bool) error { if arg.size > MaxGetBenchSize { return ErrBenchSizeTooLarge.Trace(arg.size) } msgs := make([]*message.Ins, arg.size) var ( msg *message.Ins err error ) var header message.Header // check offset r := &utils.Reader{t.file, arg.offset} p := 0 for i := 0; i < arg.size; i++ { msg, err = message.ReadMessage(&header, r, message.RF_RESEEK_ON_FAULT) err = logex.Trace(err, i) if logex.EqualAny(err, ErrNeedAddToWaiter) { // not finish, add to waiterList t.addToWaiterList(newWaiter(arg, r.Offset, p)) break } if err != nil { break } msgs[p] = msg p++ } if mustReply || p > 0 { arg.reply <- message.NewReplyCtx(t.Name, msgs[:p]) } if logex.Equal(err, io.EOF) { err = nil } return err }