Пример #1
0
        void hexpi(CloudI::API const & api,
                   int const command,
                   std::string const & name,
                   std::string const & pattern,
                   void const * const /*request_info*/,
                   uint32_t const /*request_info_size*/,
                   void const * const request,
                   uint32_t const request_size,
                   uint32_t timeout,
                   int8_t /*priority*/,
                   char const * const trans_id,
                   char const * const pid,
                   uint32_t const pid_size)
        {
            uint32_t const * const parameters = 
                reinterpret_cast<uint32_t const * const>(request);
            assert(request_size > (sizeof(uint32_t) * 2));
            uint32_t const & iteration_count = parameters[0];
            uint32_t const & digit_step = parameters[1];
            char const * digit_index =
                reinterpret_cast<char const * const>(&parameters[2]);

            // perform the work
            timer t;
            std::ostringstream result;
            for (uint32_t i = 0; i < iteration_count; ++i)
            {
                if (m_stop)
                {
                    return;
                }
                else
                {
                    std::string pi_sequence;
                    if (! bbp_pi(m_stop, digit_index,
                                 digit_step * i, pi_sequence))
                        return;
                    result << pi_sequence;
                }
            }
            std::string pi_result = result.str();
            if (! bbp_pi_verify(digit_index, pi_result))
                return;

            // insert the elapsed time as a 32 bit float
            pi_result.insert(0, "    ");
            float * elapsed_hours = reinterpret_cast<float *>(
                const_cast<char *>(pi_result.c_str()));
            *elapsed_hours = static_cast<float>(t.elapsed() / 3600.0);

            api.return_(command, name, pattern, "", 0,
                        pi_result.c_str(), pi_result.size(),
                        timeout, trans_id, pid, pid_size);
            std::cout << "execution never gets here" << std::endl;
        }
Пример #2
0
    bool do_work(bool const & abortTask,
                 uint32_t const,
                 std::string const &,
                 std::string const & workInstance,
                 uint32_t const id,
                 uint32_t const,
                 boost::scoped_array<uint8_t> const & taskData,
                 size_t const taskDataSize,
                 DatabaseQueryVector const &,
                 DatabaseQueryVector & queriesOut)
    {
        // uncomment for random failures that would be deterministic
        // based on the work code dependencies
        //if (returnFalse())
        //    return false;

        // get task data
        assert(taskDataSize > (sizeof(uint32_t) * 2));
        uint32_t & iterationCount =
            *(reinterpret_cast<uint32_t *>(&taskData[0]));
        uint32_t & digitStep =
            *(reinterpret_cast<uint32_t *>(&taskData[sizeof(uint32_t)]));
        char const * digitIndex =
            reinterpret_cast<char const *>(&taskData[sizeof(uint32_t) * 2]);

        // perform the work
        std::ostringstream result;
        for (uint32_t i = 0; i < iterationCount; ++i)
        {
            if (abortTask)
            {
                return false;
            }
            else
            {
                std::string piSequence;
                if (! bbp_pi(abortTask, digitIndex, digitStep * i, piSequence))
                    return false;
                result << piSequence;
            }
        }
        std::string const & piResult = result.str();
        if (! verify(digitIndex, piResult))
            return false;

        // create query to store the results of the work
        std::ostringstream resultQuery;
        resultQuery <<
                    "INSERT INTO incoming_results_v3 "
                    "(digit_index, data) "
                    "VALUES "
                    "(" << digitIndex << ", '" << piResult << "');";
        queriesOut.push_back(
            DatabaseQuery("cloud_data_pgsql.cloudi_tests",
                          resultQuery.str()));
        queriesOut.push_back(
            DatabaseQuery("cloud_data_mysql.cloudi_tests",
                          resultQuery.str()));
        resultQuery.str("");
        resultQuery <<
                    "{set, \"" << digitIndex << "\", <<\"" << piResult << "\">>}";
        queriesOut.push_back(
            DatabaseQuery("cloud_data_memcached.cloudi_tests",
                          resultQuery.str()));
        resultQuery.str("");
        resultQuery <<
                    "{put, \"" << digitIndex << "\", <<\"" << piResult << "\">>}";
        queriesOut.push_back(
            DatabaseQuery("cloud_data_tokyotyrant.cloudi_tests",
                          resultQuery.str()));
        resultQuery.str("");
        resultQuery <<
                    "{update_document, \"pi_state\","
                    " [{<<\"" << workInstance << "_" << id << "\">>, "
                    "<<\"" << digitIndex << "\">>}]}";
        queriesOut.push_back(
            DatabaseQuery("cloud_data_couchdb.cloudi_tests",
                          resultQuery.str()));
        return true;
    }