func (self *CoordinatorImpl) write(db string, series []*protocol.Series, shard cluster.Shard, sync bool) error { request := &protocol.Request{Type: &write, Database: &db, MultiSeries: series} // break the request if it's too big if request.Size() >= MAX_REQUEST_SIZE { if l := len(series); l > 1 { // create two requests with half the serie if err := self.write(db, series[:l/2], shard, sync); err != nil { return err } return self.write(db, series[l/2:], shard, sync) } // otherwise, split the points of the only series s := series[0] l := len(s.Points) s1 := &protocol.Series{Name: s.Name, Fields: s.Fields, Points: s.Points[:l/2]} if err := self.write(db, []*protocol.Series{s1}, shard, sync); err != nil { return err } s2 := &protocol.Series{Name: s.Name, Fields: s.Fields, Points: s.Points[l/2:]} return self.write(db, []*protocol.Series{s2}, shard, sync) } if sync { return shard.SyncWrite(request) } return shard.Write(request) }
func (self *CoordinatorImpl) write(db string, series []*protocol.Series, shard cluster.Shard, sync bool) error { request := &protocol.Request{Type: &write, Database: &db, MultiSeries: series} if sync { return shard.SyncWrite(request) } return shard.Write(request) }
func (self *CoordinatorImpl) writeWithoutAssigningId(db string, series []*protocol.Series, shard cluster.Shard, sync bool) error { request := &protocol.Request{Type: &write, Database: &db, MultiSeries: series} // break the request if it's too big if request.Size() >= MAX_REQUEST_SIZE { if l := len(series); l > 1 { // create two requests with half the serie if err := self.writeWithoutAssigningId(db, series[:l/2], shard, sync); err != nil { return err } return self.writeWithoutAssigningId(db, series[l/2:], shard, sync) } // otherwise, split the points of the only series s := series[0] l := len(s.Points) s1 := &protocol.Series{Name: s.Name, FieldIds: s.FieldIds, Points: s.Points[:l/2]} if err := self.writeWithoutAssigningId(db, []*protocol.Series{s1}, shard, sync); err != nil { return err } s2 := &protocol.Series{Name: s.Name, FieldIds: s.FieldIds, Points: s.Points[l/2:]} return self.writeWithoutAssigningId(db, []*protocol.Series{s2}, shard, sync) } // if we received a synchronous write, then this is coming from the // continuous queries which have the sequence numbers assigned if sync { return shard.SyncWrite(request, false) } // If the shard isn't replicated do a syncrhonous write if shard.ReplicationFactor() <= 1 { // assign sequenceNumber and write synchronously return shard.SyncWrite(request, true) } return shard.Write(request) }