/** * 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; }
/** * 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); }
/** * 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; }
/** * 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); }
/** * 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); }
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; }
/** * 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); }