Exemplo n.º 1
0
static int deal_with_client_rbuf(struct asfd *asfd, const char *directory,
	struct scores *scores)
{
	if(asfd->rbuf->cmd==CMD_GEN)
	{
		if(!strncmp_w(asfd->rbuf->buf, "cname:"))
		{
			struct iobuf wbuf;
			free_w(&asfd->desc);
			if(!(asfd->desc=strdup_w(asfd->rbuf->buf
				+strlen("cname:"), __func__)))
					goto error;
			logp("%s: fd %d\n", asfd->desc, asfd->fd);
			iobuf_set(&wbuf, CMD_GEN,
				(char *)"cname ok", strlen("cname ok"));

			if(asfd->write(asfd, &wbuf))
				goto error;
		}
		else if(!strncmp_w(asfd->rbuf->buf, "sigs_end"))
		{
			//printf("Was told no more sigs\n");
			if(deduplicate(asfd, directory, scores)<0)
				goto error;
		}
		else
		{
			iobuf_log_unexpected(asfd->rbuf, __func__);
			goto error;
		}
	}
	else if(asfd->rbuf->cmd==CMD_SIG)
	{
		if(champ_server_deal_with_rbuf_sig(asfd, directory, scores))
			goto error;
	}
	else if(asfd->rbuf->cmd==CMD_MANIFEST)
	{
		// Client has completed a manifest file. Want to start using
		// it as a dedup candidate now.
		if(candidate_add_fresh(asfd->rbuf->buf, directory, scores))
			goto error;
	}
	else
	{
		iobuf_log_unexpected(asfd->rbuf, __func__);
		goto error;
	}
	iobuf_free_content(asfd->rbuf);
	return 0;
error:
	iobuf_free_content(asfd->rbuf);
	return -1;
}
Exemplo n.º 2
0
static int deduplicate_maybe(struct asfd *asfd,
	struct blk *blk, const char *directory, struct scores *scores)
{
	if(!asfd->in && !(asfd->in=incoming_alloc()))
		return -1;

	if(blk_fingerprint_is_hook(blk))
	{
		if(incoming_grow_maybe(asfd->in))
			return -1;
		asfd->in->fingerprints[asfd->in->size-1]=blk->fingerprint;
	}
	if(++(asfd->blkcnt)<MANIFEST_SIG_MAX)
		return 0;
	asfd->blkcnt=0;

	if(deduplicate(asfd, directory, scores)<0)
		return -1;

	return 0;
}
    Status ModifierAddToSet::init(const BSONElement& modExpr) {

        // Perform standard field name and updateable checks.
        _fieldRef.parse(modExpr.fieldName());
        Status status = fieldchecker::isUpdatable(_fieldRef);
        if (! status.isOK()) {
            return status;
        }

        // If a $-positional operator was used, get the index in which it occurred.
        fieldchecker::isPositional(_fieldRef, &_posDollar);

        // TODO: The driver could potentially do this re-writing.

        // If the type of the value is 'Object', we might be dealing with a $each. See if that
        // is the case.
        if (modExpr.type() == mongo::Object) {
            BSONElement modExprObjPayload = modExpr.embeddedObject().firstElement();
            if (!modExprObjPayload.eoo() && StringData(modExprObjPayload.fieldName()) == "$each") {
                // It is a $each. Verify that the payload is an array as is required for $each,
                // set our flag, and store the array as our value.
                if (modExprObjPayload.type() != mongo::Array) {
                    return Status(ErrorCodes::BadValue,
                                  "Argument to $each operator in $addToSet must be an array");
                }

                status = _valDoc.root().appendElement(modExprObjPayload);
                if (!status.isOK())
                    return status;

                _val = _valDoc.root().leftChild();

                deduplicate(_val, mb::woLess(false), mb::woEqual(false));
            }
        }

        // If this wasn't an 'each', turn it into one. No need to sort or de-dup since we only
        // have one element.
        if (_val == _valDoc.end()) {
            mb::Element each = _valDoc.makeElementArray("$each");

            status = each.appendElement(modExpr);
            if (!status.isOK())
                return status;

            status = _valDoc.root().pushBack(each);
            if (!status.isOK())
                return status;

            _val = each;
        }

        // Check if no invalid data (such as fields with '$'s) are being used in the $each
        // clause.
        mb::ConstElement valCursor = _val.leftChild();
        while (valCursor.ok()) {
            const BSONType type = valCursor.getType();
            dassert(valCursor.hasValue());
            bool okForStorage = true;
            switch(type) {
            case mongo::Object:
                okForStorage = valCursor.getValueObject().okForStorage();
                break;
            case mongo::Array:
                okForStorage = valCursor.getValueArray().okForStorage();
                break;
            default:
                break;
            }

            if (!okForStorage) {
                return Status(ErrorCodes::BadValue, "Field name not OK for storage");
            }

            valCursor = valCursor.rightSibling();
        }

        return Status::OK();
    }
Exemplo n.º 4
0
int main()
{
    
    f1.open("/Users/robinmalhotra2/Desktop/csl201check.txt",std::ios::in|std::ios::out);
    
    f1.getline(s, 80, ' ');
        while (f1.good())
    {

        
        
        
       
        std::cout<<"addasd";
        if ((strlen(s)==1) && (s[0])<'9' && (s[0])>'0')
            
        {
            switch ((s[0]))
            {
                    
                case '1':
                    createandprintlist();
                    
                
                    break;
                    
                case '2':
                    sortlist();
                    break;
                    
                case '3':
                    nextinsert();
                    break;
                    
                case '4':
                    searchlist();
                    break;
                    
                case '5':
                    deletenext();
                    break;
                    
                case '6':
                    deduplicate();
                    break;
                    
                case '7':
                    mergesortthing();
                    break;
                    
                case '8':
                    credits();
                    break;
                    
                    
                    
                default:
                    break;
            }
        }
        
        
    }
    f1.close();
    
    
    
}
Exemplo n.º 5
0
Status ModifierAddToSet::init(const BSONElement& modExpr, const Options& opts, bool* positional) {
    // Perform standard field name and updateable checks.
    _fieldRef.parse(modExpr.fieldName());
    Status status = fieldchecker::isUpdatable(_fieldRef);
    if (!status.isOK()) {
        return status;
    }

    // If a $-positional operator was used, get the index in which it occurred
    // and ensure only one occurrence.
    size_t foundCount;
    bool foundDollar = fieldchecker::isPositional(_fieldRef, &_posDollar, &foundCount);

    if (positional)
        *positional = foundDollar;

    if (foundDollar && foundCount > 1) {
        return Status(ErrorCodes::BadValue,
                      str::stream() << "Too many positional (i.e. '$') elements found in path '"
                                    << _fieldRef.dottedField() << "'");
    }

    // TODO: The driver could potentially do this re-writing.

    // If the type of the value is 'Object', we might be dealing with a $each. See if that
    // is the case.
    if (modExpr.type() == mongo::Object) {
        BSONElement modExprObjPayload = modExpr.embeddedObject().firstElement();
        if (!modExprObjPayload.eoo() && StringData(modExprObjPayload.fieldName()) == "$each") {
            // It is a $each. Verify that the payload is an array as is required for $each,
            // set our flag, and store the array as our value.
            if (modExprObjPayload.type() != mongo::Array) {
                return Status(ErrorCodes::BadValue,
                              str::stream() << "The argument to $each in $addToSet must "
                                               "be an array but it was of type "
                                            << typeName(modExprObjPayload.type()));
            }

            status = _valDoc.root().appendElement(modExprObjPayload);
            if (!status.isOK())
                return status;

            _val = _valDoc.root().leftChild();

            deduplicate(_val, mb::woLess(false), mb::woEqual(false));
        }
    }

    // If this wasn't an 'each', turn it into one. No need to sort or de-dup since we only
    // have one element.
    if (_val == _valDoc.end()) {
        mb::Element each = _valDoc.makeElementArray("$each");

        status = each.appendElement(modExpr);
        if (!status.isOK())
            return status;

        status = _valDoc.root().pushBack(each);
        if (!status.isOK())
            return status;

        _val = each;
    }

    // Check if no invalid data (such as fields with '$'s) are being used in the $each
    // clause.
    mb::ConstElement valCursor = _val.leftChild();
    while (valCursor.ok()) {
        const BSONType type = valCursor.getType();
        dassert(valCursor.hasValue());
        switch (type) {
            case mongo::Object: {
                Status s = valCursor.getValueObject().storageValidEmbedded();
                if (!s.isOK())
                    return s;

                break;
            }
            case mongo::Array: {
                Status s = valCursor.getValueArray().storageValidEmbedded();
                if (!s.isOK())
                    return s;

                break;
            }
            default:
                break;
        }

        valCursor = valCursor.rightSibling();
    }

    return Status::OK();
}
Exemplo n.º 6
0
void AddToSetNode::setCollator(const CollatorInterface* collator) {
    invariant(!_collator);
    _collator = collator;
    deduplicate(_elements, _collator);
}
Exemplo n.º 7
0
void ModifierAddToSet::setCollator(const CollatorInterface* collator) {
    invariant(!_collator);
    _collator = collator;
    // Deduplicate _val (must be performed after collator is set to final value.)
    deduplicate(_val, mb::woLess(_collator, false), mb::woEqual(_collator, false));
}