func (self *CoordinatorImpl) handleSeriesDelete(user common.User, server *ClusterServer, database string, query *parser.DeleteQuery) error { owner, servers := self.clusterConfiguration.GetReplicas(server, &database) request := self.createRequest(proxyDelete, &database) queryStr := query.GetQueryStringWithTimeCondition() request.Query = &queryStr request.OriginatingServerId = &self.clusterConfiguration.localServerId request.ClusterVersion = &self.clusterConfiguration.ClusterVersion request.OwnerServerId = &owner.Id if server.Id == self.clusterConfiguration.localServerId { // this is a local delete replicationFactor := self.clusterConfiguration.GetReplicationFactor(&database) err := self.datastore.LogRequestAndAssignSequenceNumber(request, &replicationFactor, &owner.Id) if err != nil { return self.proxyUntilSuccess(servers, request) } self.deleteSeriesDataLocally(user, database, query) if err != nil { log.Error("Couldn't write data to local store: ", err, request) } // ignoring the error because we still want to send to replicas request.Type = &replicateDelete self.sendRequestToReplicas(request, servers) return nil } // otherwise, proxy the delete return self.proxyUntilSuccess(servers, request) }
func (self *LevelDbDatastore) DeleteSeriesData(database string, query *parser.DeleteQuery) error { series := query.GetFromClause() if series.Type != parser.FromClauseArray { return fmt.Errorf("Merge and Inner joins can't be used with a delete query", series.Type) } for _, name := range series.Names { var err error if regex, ok := name.Name.GetCompiledRegex(); ok { err = self.DeleteRangeOfRegex(database, regex, query.GetStartTime(), query.GetEndTime()) } else { err = self.deleteRangeOfSeries(database, name.Name.Name, query.GetStartTime(), query.GetEndTime()) } if err != nil { return err } } return nil }