예제 #1
0
 /**
  * 静态方法, 单例统一访问入口
  * @return object  返回对象的唯一实例
  */
 public static function getInstance()
 {
     if (is_null(self::$_instance) || !isset(self::$_instance)) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
예제 #2
0
 /**
  * 检查存储节点状态
  * @param string $host
  * @return int
  */
 public function checkNodeStatus($host)
 {
     $url = $host . '/api.php';
     $data = array('route' => "store/status", 'callback_url' => PluginMiniStoreOption::getInstance()->getMiniyunHost() . "info.htm");
     $http = new HttpClient();
     $http->post($url, $data);
     $result = $http->get_body();
     $result = @json_decode($result, true);
     if ($result["status"] == "1") {
         return 1;
     }
     return -1;
 }
 /**
  * 为前30个文件生成冗余备份任务
  * 并把任务推送到备份服务器
  * @param int $limit
  * @return int
  */
 public function replicateFile($limit = 30)
 {
     $miniHost = PluginMiniStoreOption::getInstance()->getMiniyunHost();
     $criteria = new CDbCriteria();
     $criteria->condition = "replicate_status=0";
     $criteria->limit = $limit;
     $criteria->offset = 0;
     $versions = FileVersion::model()->findAll($criteria);
     $fileCount = 0;
     foreach ($versions as $version) {
         //设置replicate_status=1
         $signature = $version->file_signature;
         $version->replicate_status = 1;
         $version->save();
         //为其它节点生成冗余备份记录
         $nodes = PluginMiniStoreNode::getInstance()->getReplicateNodes($signature);
         foreach ($nodes as $node) {
             $task = ReplicateTask::model()->find("file_signature=:file_signature and node_id=:node_id", array("file_signature" => $signature, "node_id" => $node["id"]));
             if (!isset($task)) {
                 $task = new ReplicateTask();
                 $task->file_signature = $signature;
                 $task->node_id = $node["id"];
                 $task->status = 0;
                 $task->save();
                 $this->pushReplicateTask($miniHost, $task);
                 $fileCount++;
             }
         }
     }
     return $fileCount;
 }