// Create a mock index that uses a feeder function to provide query results. // Creates an index with single partition, single slice with a snapshot. func (s *scannerTestHarness) createIndex(name, bucket string, feeder snapshotFeeder) c.IndexDefnId { s.indexCount++ pc := c.NewKeyPartitionContainer() pId := c.PartitionId(0) endpt := c.Endpoint("localhost:1000") pDef := c.KeyPartitionDefn{Id: pId, Endpts: []c.Endpoint{endpt}} pc.AddPartition(pId, pDef) instId := c.IndexInstId(s.indexCount) defnId := c.IndexDefnId(0xABBA) indDefn := c.IndexDefn{Name: name, Bucket: bucket, DefnId: defnId} indInst := c.IndexInst{InstId: instId, State: c.INDEX_STATE_ACTIVE, Defn: indDefn, Pc: pc, } // TODO: Use cmdch to update map s.scanner.indexInstMap[instId] = indInst sc := NewHashedSliceContainer() partInst := PartitionInst{Defn: pDef, Sc: sc} partInstMap := PartitionInstMap{pId: partInst} snap := &mockSnapshot{feeder: feeder} snap.SetTimestamp(s.scanTS) slice := &mockSlice{} slId := SliceId(0) sc.AddSlice(slId, slice) // TODO: Use cmdch to update map s.scanner.indexPartnMap[instId] = partInstMap return defnId }
func (meta *metaNotifier) makeDefaultPartitionContainer() common.PartitionContainer { pc := common.NewKeyPartitionContainer() //Add one partition for now addr := net.JoinHostPort("", meta.config["streamMaintPort"].String()) endpt := []common.Endpoint{common.Endpoint(addr)} partnDefn := common.KeyPartitionDefn{Id: common.PartitionId(1), Endpts: endpt} pc.AddPartition(common.PartitionId(1), partnDefn) return pc }
//create func (cbq *cbqBridge) handleCreate(w http.ResponseWriter, r *http.Request) { var res IndexMetaResponse indexinfo := indexRequest(r).Index logging.Debugf("CbqBridge::handleCreate Received CreateIndex %v", indexinfo) //generate a new unique id defnID := rand.Int() idxDefn := common.IndexDefn{DefnId: common.IndexDefnId(defnID), Name: indexinfo.Name, Using: common.ForestDB, Bucket: indexinfo.Bucket, IsPrimary: indexinfo.IsPrimary, SecExprs: indexinfo.SecExprs, ExprType: common.N1QL, PartitionScheme: common.SINGLE, PartitionKey: indexinfo.PartnExpr, WhereExpr: indexinfo.WhereExpr} idxInst := common.IndexInst{InstId: common.IndexInstId(defnID), Defn: idxDefn, State: common.INDEX_STATE_INITIAL, } if !cbq.config["enableManager"].Bool() { pc := common.NewKeyPartitionContainer() //Add one partition for now partnId := common.PartitionId(0) addr := net.JoinHostPort("", cbq.config["streamMaintPort"].String()) endpt := []common.Endpoint{common.Endpoint(addr)} partnDefn := common.KeyPartitionDefn{Id: partnId, Endpts: endpt} pc.AddPartition(partnId, partnDefn) idxInst.Pc = pc } indexinfo.DefnID = uint64(defnID) respCh := make(MsgChannel) cbq.supvRespch <- &MsgCreateIndex{mType: CBQ_CREATE_INDEX_DDL, indexInst: idxInst, respCh: respCh} //wait for response from indexer msg := <-respCh if msg.GetMsgType() == MSG_SUCCESS { res = IndexMetaResponse{ Status: RESP_SUCCESS, Indexes: []IndexInfo{indexinfo}, } cbq.indexMap[idxInst.InstId] = indexinfo } else { err := msg.(*MsgError).GetError() logging.Debugf("CbqBridge::handleCreate Received Error %s", err.cause) ierr := IndexError{Code: string(RESP_ERROR), Msg: err.cause.Error()} res = IndexMetaResponse{ Status: RESP_ERROR, Errors: []IndexError{ierr}, } } sendResponse(w, res) }