/** * 为文件增加冗余备份节点 * @param $signature * @param $nodeId */ public function addReplicateNode($signature, $nodeId) { $version = MiniVersion::getInstance()->getBySignature($signature); if (!empty($version)) { $meta = FileVersionMeta::model()->find("version_id=:version_id and meta_key='store_id'", array("version_id" => $version["id"])); if (isset($meta)) { $value = $meta->meta_value; $isExist = false; $ids = explode(",", $value); foreach ($ids as $id) { if ($id === $nodeId) { $isExist = true; } } if (!$isExist) { $value .= "," . $nodeId; $meta->meta_value = $value; $meta->save(); $ids = explode(",", $value); if (count($ids) >= 3) { //整个文件冗余备份成功 PluginMiniStoreVersion::getInstance()->replicateSuccess($signature); } } } else { $meta = new FileVersionMeta(); $meta->version_id = $version["id"]; $meta->meta_value = $nodeId; $meta->save(); } } }
/** * * 创建版本的meta信息 * @param int $id * @param string $key * @param string $value * * @since 1.1.2 */ public function create($id, $key, $value) { $criteria = new CDbCriteria(); $criteria->condition = "version_id=:version_id and meta_key =:meta_key"; $criteria->params = array('version_id' => $id, 'meta_key' => $key); $meta = FileVersionMeta::model()->find($criteria); if (empty($meta)) { $meta = new FileVersionMeta(); $meta["version_id"] = $id; $meta["meta_key"] = $key; $meta["meta_value"] = $value; $meta->save(); } else { if ($meta["meta_value"] != $value) { $meta["meta_value"] = $value; $meta->save(); } } }