404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@18.119.103.130: ~ $
<?php
/**
 * Copyright 2017 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

namespace Google\Cloud\Core\Batch;

use Google\Cloud\Core\SysvTrait;

/**
 * A class for executing jobs in batch.
 *
 * @experimental The experimental flag means that while we believe this method
 *      or class is ready for use, it may change before release in backwards-
 *      incompatible ways. Please use with caution, and test thoroughly when
 *      upgrading.
 */
class BatchRunner
{
    use BatchDaemonTrait;
    use SysvTrait;

    /**
     * @var JobConfig
     */
    private $config;

    /**
     * @var ConfigStorageInterface
     */
    private $configStorage;

    /**
     * @var ProcessItemInterface
     */
    private $processor;

    /**
     * Determine internal implementation and loads the configuration.
     *
     * @param ConfigStorageInterface $configStorage [optional] The
     *        ConfigStorage object to use. **Defaults to** null. This is only
     *        for testing purpose.
     * @param ProcessItemInterface $processor [optional] The processor object
     *        to use. **Defaults to** null. This is only for testing purpose.
     */
    public function __construct(
        ConfigStorageInterface $configStorage = null,
        ProcessItemInterface $processor = null
    ) {
        if ($configStorage === null || $processor === null) {
            if ($this->isSysvIPCLoaded() && $this->isDaemonRunning()) {
                $configStorage = new SysvConfigStorage();
                $processor = new SysvProcessor();
            } else {
                $configStorage = InMemoryConfigStorage::getInstance();
                $processor = $configStorage;
            }
        }
        $this->configStorage = $configStorage;
        $this->processor = $processor;
        $this->loadConfig();
    }

    /**
     * Register a job for batch execution.
     *
     * @param string $identifier Unique identifier of the job.
     * @param callable $func Any Callable except for Closure. The callable
     *        should accept an array of items as the first argument.
     * @param array $options [optional] {
     *     Configuration options.
     *
     *     @type int $batchSize The size of the batch.
     *     @type float $callPeriod The period in seconds from the last execution
     *                 to force executing the job.
     *     @type int $numWorkers The number of child processes. It only takes
     *               effect with the {@see \Google\Cloud\Core\Batch\BatchDaemon}.
     *     @type string $bootstrapFile A file to load before executing the
     *                  job. It's needed for registering global functions.
     * }
     * @return bool true on success, false on failure
     * @throws \InvalidArgumentException When receiving a Closure.
     */
    public function registerJob($identifier, $func, array $options = [])
    {
        if ($func instanceof \Closure) {
            throw new \InvalidArgumentException('Closure is not allowed');
        }
        // Always work on the latest data
        $result = $this->configStorage->lock();
        if ($result === false) {
            return false;
        }
        $this->config = $this->configStorage->load();
        $this->config->registerJob(
            $identifier,
            function ($id) use ($identifier, $func, $options) {
                return new BatchJob($identifier, $func, $id, $options);
            }
        );

        try {
            $result = $this->configStorage->save($this->config);
        } finally {
            $this->configStorage->unlock();
        }
        return $result;
    }

    /**
     * Submit an item.
     *
     * @param string $identifier Unique identifier of the job.
     * @param mixed $item It needs to be serializable.
     *
     * @return void
     * @throws \RuntimeException
     */
    public function submitItem($identifier, $item)
    {
        $job = $this->getJobFromId($identifier);
        if ($job === null) {
            throw new \RuntimeException(
                "The identifier does not exist: $identifier"
            );
        }
        $idNum = $job->id();
        $this->processor->submit($item, $idNum);
    }

    /**
     * Get the job with the given identifier.
     *
     * @param string $identifier Unique identifier of the job.
     *
     * @return BatchJob|null
     */
    public function getJobFromId($identifier)
    {
        return $this->config->getJobFromId($identifier);
    }

    /**
     * Get the job with the given numeric id.
     *
     * @param int $idNum A numeric id of the job.
     *
     * @return BatchJob|null
     */
    public function getJobFromIdNum($idNum)
    {
        return $this->config->getJobFromIdNum($idNum);
    }

    /**
     * Get all the jobs.
     *
     * @return BatchJob[]
     */
    public function getJobs()
    {
        return $this->config->getJobs();
    }

    /**
     * Load the config from the storage.
     *
     * @return bool true on success
     * @throws \RuntimeException when it fails to load the config.
     */
    public function loadConfig()
    {
        $result = $this->configStorage->lock();
        if ($result === false) {
            throw new \RuntimeException('Failed to lock the configStorage');
        }
        try {
            $result = $this->configStorage->load();
        } catch (\RuntimeException $e) {
            $this->configStorage->clear();
            throw $e;
        } finally {
            $this->configStorage->unlock();
        }

        $this->config = $result;
        return true;
    }

    /**
     * Gets the item processor.
     *
     * @return ProcessItemInterface
     */
    public function getProcessor()
    {
        return $this->processor;
    }
}

Filemanager

Name Type Size Permission Actions
BatchDaemon.php File 5.36 KB 0644
BatchDaemonTrait.php File 1.31 KB 0644
BatchJob.php File 6.01 KB 0644
BatchRunner.php File 6.17 KB 0644
BatchTrait.php File 6.45 KB 0644
ClosureSerializerInterface.php File 1.25 KB 0644
ConfigStorageInterface.php File 1.65 KB 0644
HandleFailureTrait.php File 3.01 KB 0644
InMemoryConfigStorage.php File 5.41 KB 0644
InterruptTrait.php File 1.89 KB 0644
JobConfig.php File 3.07 KB 0644
JobInterface.php File 1.55 KB 0644
JobTrait.php File 2.29 KB 0644
OpisClosureSerializer.php File 1.66 KB 0644
ProcessItemInterface.php File 1.42 KB 0644
QueueOverflowException.php File 1.12 KB 0644
Retry.php File 2.27 KB 0644
SerializableClientTrait.php File 3.12 KB 0644
SimpleJob.php File 2.31 KB 0644
SimpleJobTrait.php File 3.52 KB 0644
SysvConfigStorage.php File 4.61 KB 0644
SysvProcessor.php File 2.8 KB 0644