public function fetch($hash, $class, $username)
 {
     $classMetadata = $this->metadataManager->loadByClassname($class);
     if (!$this->storageAdapter->contains($hash, $classMetadata->getContext())) {
         throw new ObjectNotFoundException($hash);
     }
     $data = $this->storageAdapter->fetch($hash, $classMetadata->getContext());
     if (array_key_exists('type', $data) && $data['type'] === 'backup') {
         /** @var PolicyCollectionInterface $policyCollection */
         $policyCollection = unserialize($data['policies']);
         /** @var ReplicatorPolicy $policy */
         $policy = $policyCollection->get(self::POLICY_NAME);
         throw new NotPrimaryServerException($policy->getPrimaryServer());
     }
     // TODO security-checker with given username ("%s::%s", server, username)
     return $data;
 }
 public function delete($hash, $className)
 {
     $metadata = $this->metadataManager->loadByClassname($className);
     $this->searchAdapter->deindex($hash, $metadata);
     $this->storageAdapter->delete($hash, $metadata->getContext());
 }