Пример #1
0
/**
 * Gets the current value for a key.
 * (See the MP description for full details.)
 */
const char *mapreduce_get_value(mapreduce_t *mr, const char *result_key)
{

	const char * back = datastore_get(mr -> dictionary, result_key, NULL); 

	return back;
}
Пример #2
0
/**
 * Adds the key-value pair to the mapreduce data structure.  This may
 * require a reduce() operation.
 *
 * @param key
 *    The key of the key-value pair.  The key has been malloc()'d by
 *    read_from_fd() and must be free()'d by you at some point.
 * @param value
 *    The value of the key-value pair.  The value has been malloc()'d
 *    by read_from_fd() and must be free()'d by you at some point.
 * @param mr
 *    The pass-through mapreduce data structure (from read_from_fd()).
 */
static void process_key_value(const char *key, const char *value, mapreduce_t *mr)
{
	//printf("DO YOU EVEN COME HERE?\n");
	datastore_t * curr = mr -> dictionary; 
	char * old; 
	char * add; 
	unsigned long * rev = malloc(sizeof(unsigned long)); 

	//get it - if null, put 
	//else temp = reduce, then update it 
	//printf("This is the pair (%s,%s)\n", key, value);

	old = (char*)datastore_get(curr, key, (unsigned long *)rev);

	if (old == NULL){
		//printf("***************************************************\n");
		datastore_put(curr, key, value);
		free( (char *)key);
		free((char *) value);
		free (rev);
		return; 
	}
	else {
		old = (char*)datastore_get(curr, key, (unsigned long *)rev);
		//printf("this is old %s\n", old);
		//fprintf(stderr,"THIS IS THE VALUE OF MR %s\n", (char *) mr);
		//printf("this is the value of old %s and the value of new %s\n", old, value);


		if (old != NULL){
		add = (char*) mr->myreduce_function(old, value);
		//printf("this is the one we will add %s\n", add);
		free(old); 

		//printf("This is what is being sent in..... curr -> %s, key -> %s, add -> %s, rev -> %lu\n", curr, key, add, *rev);
		//printf("this is the key %s\n", key);

		datastore_update(curr, key, add, *rev);
		free(add);}
	}
	free((char *) value);
	free((char *) key);
	free((char *) rev);
}
Пример #3
0
/**
 * Gets the current value for a key.
 * (See the MP description for full details.)
 */
const char *mapreduce_get_value(mapreduce_t *mr, const char *result_key)
{       //printf("called get value\n");
	char *abc=NULL;
        unsigned long ret_get_value;
	abc=datastore_get(&mr->ds,result_key,&ret_get_value);
 	//printf("returned value is %s for revision %d\n",abc,revision);
        if(abc!=NULL)
        return abc;
        else
	return NULL;
}
Пример #4
0
/**
 * Adds the key-value pair to the mapreduce data structure.  This may
 * require a reduce() operation.
 *
 * @param key
 *    The key of the key-value pair.  The key has been malloc()'d by
 *    read_from_fd() and must be free()'d by you at some point.
 * @param value
 *    The value of the key-value pair.  The value has been malloc()'d
 *    by read_from_fd() and must be free()'d by you at some point.
 * @param mr
 *    The pass-through mapreduce data structure (from read_from_fd()).
 */
static void process_key_value(const char *key, const char *value, mapreduce_t *mr)
{
	unsigned long rev;
	const char * oldVal= datastore_get(mr->data, key, &rev);
	if(!oldVal){
		datastore_put(mr->data, key, value);
	}
	else{
		const char * newVal= mr->myreduce(oldVal, value);
		datastore_update(mr->data, key, newVal, rev);
		free((char *)newVal);
	}
	if(oldVal){
		free((char *)oldVal);
	}
	free((char *)value);
	free((char *)key);
}
Пример #5
0
/**
 * Adds the key-value pair to the mapreduce data structure.  This may
 * require a reduce() operation.
 *
 * @param key
 *    The key of the key-value pair.  The key has been malloc()'d by
 *    read_from_fd() and must be free()'d by you at some point.
 * @param value
 *    The value of the key-value pair.  The value has been malloc()'d
 *    by read_from_fd() and must be free()'d by you at some point.
 * @param mr
 *    The pass-through mapreduce data structure (from read_from_fd()).
 */
static void process_key_value(const char *key, const char *value, mapreduce_t *mr)
{       
	// printf("key=%s value=%s  \n",key,value);
       // pthread_mutex_lock(&m);
       unsigned long ret_value; int k=0;
       ret_value=datastore_put(&mr->ds,key,value);
      // printf("ret_value is %d\n",ret_value);
       if(ret_value==0)
         {   
        const char *val=NULL;
        const char *val2=NULL;
		 unsigned long ret_get_value;
                
		 val=datastore_get(&mr->ds,key,&ret_get_value);
                 //printf("before reduce valu1=%s value2=%s revision\n",val,value);
                 val2=mr->myreduce(value,val);
                 //printf("after reduce %s \n",val);   
                 k=datastore_update(&mr->ds,key,val2,ret_get_value);
      	
	//if(val2!=NULL) {
	free(val2);
        //printf("free val2 %s\n",val2);
	val2=NULL;
	//}
        //if(val!=NULL)	{ 
	free(val);
	//printf("free val %s \n",val);
	val= NULL;     
	//}
	}
	 //if(key!=NULL)
         free(key);
         key=NULL;
 	 //if(value!=NULL){
         //printf("free value %s \n",value);
         free(value);
           value=NULL;
        //}
 	//pthread_mutex_unlock(&m);	
       //printf("key=%s value=%s revision=%d \n",key,value,revision);
}
Пример #6
0
jsonres_t process_request(const char * uri, jsonreq_t reqss)
{
    jsonres_t response;
    datastore_entry_t request;
    request.key = reqss.key;
    request.value = reqss.value;
    request.rev = reqss.rev;
    if (strcmp(uri,"/add")==0)
    {
	if(datastore_put(map,request.key, request.value)==0){
	response.success = "KEY ALREADY EXISTS";
	//response.value = request.value;
	response.rev = 0;
	}
	else{
	response.success = "true";
	response.value = request.value;
	response.rev = 0;
	}
	return response;
    }
    else if (strcmp(uri,"/update")==0){
    unsigned long ret;
    ret = datastore_update(map, request.key, request.value,request.rev);
    if(ret == 0)
    {
    response.success = "KEY DOES NOT EXIST";
	//response.value = "0";
	response.rev = 0;
    }
    else if (ret == -1)
    {
    response.success = "REVISION NUMBER DOES NOT MATCH";
	//response.value = request.value;
	response.rev = 0;
    }
    else
    {
    response.success = "true";
	response.value = request.value;
	response.rev = (int)ret;
    }
    return response;
    }
    else if (strcmp(uri,"/get")==0){
    char* ret = NULL;
    int r = 0;
    ret = datastore_get(map, request.key, &r);
    if(ret==NULL)
    {
    response.success = "KEY DOES NOT EXIST";
	//response.value = "0";
	response.rev = 0;
    }
    else
    {
    response.success = "true";
	response.value = ret;
	response.rev = r;
    }
    return response;
    }
    else if (strcmp(uri,"/delete")==0){
    int dd = datastore_delete(map,request.key);
    if(dd==0)
    {
    response.success = "KEY DOES NOT EXIST";
	//response.value = "0";
	response.rev = 0;
    }
    else
    {
    response.success = "true";
	//response.value = "0";
	response.rev = 0;
    }
    return response;
    }
    return response;


}
Пример #7
0
/**
 * Gets the current value for a key.
 * (See the MP description for full details.)
 */
const char *mapreduce_get_value(mapreduce_t *mr, const char *result_key)
{
	return datastore_get(mr->data, result_key, NULL);
}